+1 Даниэлю ДиПаоло. Я решил опубликовать отдельный ответ, чтобы объяснить, почему это так.
В то время как циклы в Java могут быть записаны одним из двух способов. Если в теле цикла есть только одна строка, вы можете записать их в сокращенной форме:
while (true)
System.out.println("While loop");
Это будет печатать «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 ;
}
(обратите внимание, что я оставил там ошибочную точку с запятой), вы обнаружите, что предполагаемое тело цикла будет выполнено ровно один раз, поскольку цикл никогда не запустится.
person
alastairs
schedule
09.04.2010
infinite-loop
не имеет смысла. - person Daniel DiPaolo   schedule 10.04.2010while (r == false) ;
— это бесконечный цикл, ничего не делающий, так как r инициализируется значением false. - person Dave Costa   schedule 10.04.2010while (false)
? - person Daniel DiPaolo   schedule 10.04.2010