В то время как странность петли в Java - PullRequest
3 голосов
/ 31 декабря 2010

Я заметил, что у Java (следовательно, вероятно, C) нет проблем с этим:

while(condition1) {
    //do somethin'
} while(condition2);

Это то же самое, что и

while(condition1 && condition2) {
    //do somethin'
}

Ответы [ 3 ]

14 голосов
/ 31 декабря 2010

Нет, у вас есть две петли.

while(condition1) {
  // do something
}

while(condition2); // second loop which does nothing.

Второй цикл такой же, как

while(condition2) { }

РЕДАКТИРОВАТЬ: я предлагаю регулярно использовать автоматический форматер в вашей IDE. В противном случае вы можете создать форматирование, которое предполагает, что код делает то, чего не делает.

пример 1

if (condition)
    statement1;
    statement2;
statement3;

В этом примере кажется, что первые два оператора являются частью условия if, но только первое является.

пример 2

http://www.google.com/
statement;

Не похоже на легальную Java, но это не по причинам, которые предлагает форматирование;)

4 голосов
/ 31 декабря 2010

Нет, они разные.

Первый while(condition1) будет запущен первым.

Затем следует while(condition2), который не имеет ничего после него, кроме одного ;, что означает, что это просто какое-то пустое утверждение.

Помните, что в управляющих блоках, таких как if, for, while, если вы не используете скобки {}, то только первый непосредственный оператор после него будет считаться его частью.

Пример:

if (condition)
    System.out.println("hello"); // prints only if condition is true.
    System.out.println("no"); // not bound to the 'if'. Prints regardless.

while (condition)
    ; // do nothing!
    System.out.println("something"); // not bound to the while

Редактировать Пустой цикл while упоминается в соглашениях Java-кода

7,6 while Заявления

Оператор while должен иметь следующую форму:

while (condition) {
    statements;
}

Пустое выражение while должно иметь следующую форму:

while (condition);
0 голосов
/ 31 декабря 2010

Там нет конструкции Java, как показано в первой форме. Вы, наверное, видели

do {

} while (cond)

РЕДАКТИРОВАТЬ : Вы неправильно читаете первую форму. После } должен был быть разрыв строки. Это также смутило меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...