2014-11-25 6 views
5

Gestern las ich über den Komma-Operator in Java für for-Schleifen. Was funktionierte, wie ich es erwartet hatte. Ich dachte an diese Konstruktion, aber es funktioniert nicht wie erwartet.Do {} while (,) mit Komma-Operator, ist das überhaupt möglich?

';' expected 
     } while((userInput < 1 || userInput > 3), wrongInput = true); 

';' expected 
     } while((userInput < 1 || userInput > 3), wrongInput = true); 

Meine Idee war, dass nach einer Iteration, wenn die userInput war nicht zwischen 1 und 3, soll es boolean wrongInput zu true so dass während der nächsten Iteration wird eine Fehlermeldung angezeigt wird eingestellt. Zeigt an, dass userInput ungültig war.

private int askUserToSelectDifficulty() { 
    int userInput; 
    Boolean wrongInput = false; 

    do{ 
     if(wrongInput) println("\n\t Wrong input: possible selection 1, 2 or 3"); 
     userInput = readInt(); 
    } while((userInput < 1 || userInput > 3), wrongInput = true); 

    return userInput; 
} 

I vorstellen, dass vielleicht weil dies innerhalb der äquivalent zu dem bedingten Teil einer for-Schleife, dass diese ungültige Syntax ist. Weil Sie im bedingten Teil keinen Kommaoperator verwenden können? Giving multiple conditions in for loop in Java Java - comma operator outside for loop declaration

+1

einen Blick auf Java-Operatoren - https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html – Joseph118

+1

und diese Beispiele Koma verwendet werden mehrere Werte aber nicht Bedingungen – Joseph118

+0

@ Joseph118 zuweisen Gut zu wissen, dass das, überhaupt kein Operator in Java ist, wie die NPE schon darauf hingewiesen hat. Es ist in der Tat nicht in der Dokumentation. – Joop

Antwort

1

Es ist in Java (nicht in dem C/C++ Sinne sowieso) kein Komma-Operator.

Beispiele, wo ich den Komma-Operator gesehen for-Schleifen verwendet werden in Es gibt einige Kontexte, in denen Sie mehrere Dinge gleichzeitig mit einem Komma deklarieren und initialisieren können, aber das verallgemeinert sich nicht auf andere Kontexte wie den in Ihrem Beispiel.

Eine Möglichkeit zur Phrase ist Ihre Schleife wie folgt:

while (true) { 
    userInput = readInt(); 
    if (userInput >= 1 && userInput <= 3) { 
     break; 
    } 
    println("\n\t Wrong input: possible selection 1, 2 or 3"); 
}; 
3

Es könnte am besten sein, diese ein wenig entrollen.

userInput = readInt(); 
while (userInput < 1 || userInput > 3) { 
    System.out.println("\n\tWrong input: possible selection 1, 2 or 3"); 
    userInput = readInt(); 
} 

Dies vermeidet die Notwendigkeit für eine Flagge.