После условия ставится точка с запятой. Когда вы используете фигурные скобки, чтобы указать блок для вашего , а
, вы не используете точку с запятой.
+1 Даниэлю ДиПаоло. Я подумал, что отправлю отдельный ответ, чтобы прояснить , почему это так.
Циклы while в Java могут быть написаны одним из двух способов. Если в теле цикла есть только одна строка, вы можете записать их в сокращенном виде:
while (true)
System.out.println("While loop");
Это будет выводить на консоль «Пока цикл» до тех пор, пока программа не завершится. Другой вариант - указать тело цикла между фигурными скобками, как вы это делали выше:
int i = 0;
while (i < 10) {
System.out.println("i = " + i);
i++;
}
Это распечатает «i = 0», «i = 1», ..., «i = 9» каждое на отдельном линия.
Код, который вы опубликовали, смешивает их. В сокращенном цикле while синтаксический анализатор Java ожидает найти оператор между условием цикла while и точкой с запятой. Поскольку здесь нет оператора, цикл while выполняется, но ничего не делает; у него нет тела. Более того, поскольку цикл не имеет тела, у вашей переменной r нет возможности принять новое значение; условие всегда истинно, и цикл никогда не завершается.
Если бы вы отменили условие в цикле while в своем примере, то есть
boolean r = false ; int s = 0 ;
while (r != false) ;
{
s = getInt() ;
if (!(s>=0 && s<=2)) System.out.println ("try again not a valid response") ;
else r = true ;
}
(обратите внимание, я оставил там ошибочную точку с запятой), вы обнаружите, что предполагаемое тело цикла будет выполнено ровно один раз, так как цикл никогда бы не убежал.
Другие указали на ошибку, но ваш код пугает и в других отношениях, что в конечном итоге сбивает вас с толку:
if (!(s>=0 && s<=2)) System.out.println ("try again not a valid response") ;
else r = true ;
Это плохо, потому что вы можете легко намереваться более одного оператора для выполнения в случае предложения if
или else
. Используйте фигурные скобки и избегайте размещения условных операторов в одной строке:
if (!(s>=0 && s<=2))
{
System.out.println ("try again not a valid response");
}
else
{
r = true;
}
Его легче читать, и с гораздо меньшей вероятностью появятся трудно заметные ошибки.
while (r == false)
должно быть
while (! R)
Несмотря на то, что все остальные говорили о точке с запятой, вот что я считаю неправильным:)
В дополнение к другим комментариям вам также следует изменить if на
if (s < 0 || s > 2)
Это гораздо понятнее.
Несвязанный ответ, я действительно рекомендую вам следовать руководящим принципам Sun по стилю.
boolean r = false ;
int s = 0 ;
while (r == false) {
s = getInt() ;
if (!(s>=0 && s<=2)) {
System.out.println ("try again not a valid response") ;
} else {
r = true ;
}
}
Вы можете избавиться от переменной r
и условия if / else, если оцените результат в цикле самостоятельно.
int s = 0;
while( ( s = getInt() ) < 0 || s > 2 ) {
System.out.println( "Try again, not a valid response");
}