in.nextLine().equals("Start") || in.nextLine().equals("start")
Das von links nach rechts ausgeführt werden, so wird zunächst in.nextLine().equals("Start")
ausgeführt.
Nehmen wir an, Sie geben "start"
ein. Linke Seite gibt false
zurück. Die Bewertung des gesamten Ausdrucks wird fortgesetzt. Die rechte Seite wird ausgeführt, in.nextLine().equals("start")
. So liest es eine andere Zeile, wartet auf Ihren anderen Eingang. Das ist nicht was du willst.
Um dies zu beheben (dies ist auch eine allgemeine Regel): nicht den Zustand in der if
Zustand ändern. Mit anderen Worten: Ausdruck in der Bedingung sollte keine side effects haben.
Sie können das Ergebnis des Verfahrens zuweisen, der den Zustand ändert, in.nextLine()
, auf eine Referenz:
String line = in.nextLine();
if (line.equals("Start") || line.equals("start"))
Sie können auch den Zustand wie schreiben:
if (line.equalsIgnoreCase("start"))
oder
if (line.toLowerCase().equals("start"))
Jetzt ist jeder Fall Kombination in Ordnung, auch "START"
.
Last but not least: diese ||
werden nicht Pipes genannt. Wenn Sie im Programmierkontext das Wort "pipe" verwenden, denken viele Leute über Unix pipes, |
Symbol in der Befehlszeile nach.
In Java ||
ist "logische oder Operator", "logische oder". Zur Unterscheidung mit "binär oder", |
, die sehr unterschiedlich ist.
Was passiert, wenn Sie 'in.nextLine()' aufrufen? – njzk2
'in.nextLine()' wartet wahrscheinlich auf weitere Eingaben. Versuchen Sie, die Eingabe in einer Variablen zu speichern und den Wert davon zu überprüfen. – MikeTheLiar
Als allgemeine Regel habe ich es nützlich gefunden, * Zustandsänderungen niemals "inline" mit anderen Berechnungen/Auswertungen zu machen. (In Ihrem Fall sind die Statusänderungen, wenn Sie Eingaben lesen, die Sie "inline" mit einer booleschen Bedingung machen. Ein anderes Beispiel für das Inkrementieren, zB "i ++".) Ich fand es immer klarer und einfacher, wenn Sie richtig sind halte sie getrennt. Fügen Sie die Statusänderungen vor oder nach anderen Operationen in einer separaten Anweisung ein. Hätten Sie das hier getan, wäre Ihr Problem nie aufgetreten. – jpmc26