Как вы просили привести пример с for
в комментариях.
Кажется, что смысл выполнения упражнения - выполнять итерацию в меню до тех пор, пока не будет выполнено условие выхода ("X".equals(input)
).Это означает, что между тремя условиями в операторе for
необходимо указать только одно.Это связано с тем, что общая форма (основного) оператора for
имеет вид
for ( [ForInit] ; [Expression] ; [ForUpdate] )
, где ни один из этих терминов в скобках не является обязательным, поэтому мы также можем избавиться от [ForInit]
и [ForUpdate]
(, но с запятой ).Это приводит к тому, что ничего не инициализируется с помощью [ForInit]
и ничего не делается в конце каждой итерации цикла с помощью [ForUpdate]
, в результате чего мы проверяем только условие выхода, которое задается выражением [Expression]
(когда оно вычисляетсяна false
, цикл завершается).
Обратите внимание, что console
объявляется вне цикла, поскольку было бы расточительно выделять его на каждой итерации.А также input
, так как вам это нужно в условии оператора for
.
Scanner console = new Scanner(System.in);
String input = "";
for (;!"X".equals(input);) { // notice, the first and last part of the for loop are absent
displayMenu();
input = console.nextLine().toUpperCase();
System.out.println();
switch (input) {
case "A": System.out.println("Option #A was selected"); break;
case "B": System.out.println("Option #B was selected"); break;
case "C": System.out.println("Option #C was selected"); break;
case "D": System.out.println("Option #D was selected"); break;
case "X": System.out.println("You chose to Exit"); break;
default: System.out.println("Invalid selection made"); break;
}
}
Вы можете заметить, что это немного неловко, поскольку это не то, что вы обычно используете цикл for
для.
В любом случае, на этом этапе версия while
становится тривиальной (while (!"X".equals(input))
) и, в этом случае, do...while
также эквивалентна (do { ... } while (!"X".equals(input))
), так как применяется то же условиекак в конце токовой петли, так и в начале следующей, и между ними нет побочных эффектов.
Кроме того, вы можете заметить, что while (condition)
и for (; condition ;)
функционально эквивалентныи вы можете узнать, почему вы должны использовать один вместо другого.Ответ читаемость.Намного яснее, что вы хотите делать, когда делаете while (condition)
.