Что случилось с этим циклом с условием продолжения? [дубликат]

7
задан RRK 6 June 2016 в 06:11
поделиться

7 ответов

После условия ставится точка с запятой. Когда вы используете фигурные скобки, чтобы указать блок для вашего , а , вы не используете точку с запятой.

33
ответ дан 6 December 2019 в 04:46
поделиться

+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 ; 
}

(обратите внимание, я оставил там ошибочную точку с запятой), вы обнаружите, что предполагаемое тело цикла будет выполнено ровно один раз, так как цикл никогда бы не убежал.

3
ответ дан 6 December 2019 в 04:46
поделиться

Другие указали на ошибку, но ваш код пугает и в других отношениях, что в конечном итоге сбивает вас с толку:

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;
}

Его легче читать, и с гораздо меньшей вероятностью появятся трудно заметные ошибки.

8
ответ дан 6 December 2019 в 04:46
поделиться

Удалите ';' через некоторое время.

9
ответ дан 6 December 2019 в 04:46
поделиться

while (r == false)

должно быть

while (! R)

Несмотря на то, что все остальные говорили о точке с запятой, вот что я считаю неправильным:)

3
ответ дан 6 December 2019 в 04:46
поделиться

В дополнение к другим комментариям вам также следует изменить if на

if (s < 0 || s > 2)

Это гораздо понятнее.

3
ответ дан 6 December 2019 в 04:46
поделиться

Несвязанный ответ, я действительно рекомендую вам следовать руководящим принципам 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");
}
1
ответ дан 6 December 2019 в 04:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: