Подтвердить что ты не робот

Продолжает ли работать в то время?

У меня есть вопрос, который выглядит так:

User user = userDao.Get(1);

do
{
 // processing


 // get the next user
 //
 user = UserDao.GetNext(user.Id);

 if(user == null)
       continue;   // will this work?????????????
}
while ( user != null)

Если это сработает, то он перейдет к началу инструкции do, а пользователь имеет значение null, поэтому все будет нарушено?

Может быть, я должен переработать цикл для выражения while?

4b9b3361

Ответ 1

Продолжение приводит к тому, что он переходит к оценке на botton, поэтому программа может оценить, следует ли продолжить с другой итерацией или выходом. В этом случае он выйдет.

Это спецификация: http://java.sun.com/docs/books/jls/third_edition/html/statements.html#6045

Такие языковые вопросы вы можете найти в Спецификации языка Java: http://java.sun.com/docs/books/jls/

Ответ 2

Это действительно не лучший способ написать этот код. Если пользователь имеет значение NULL, вы получите исключение NullPointerException при попытке получить user.id в следующий раз. Лучший способ сделать это:

User user = UserDao.Get(1);
while(user != null) {
  // do something with the user
  user = UserDao.GetNext(user.id);
}

Ответ 3

Почему вы тестируете пользователя в двух местах? Условие while прекратит цикл, когда пользователь имеет значение null, что вам нужно.

Ответ 4

Да, continue будет работать в цикле do..while.

Вероятно, вы хотите использовать break вместо continue, чтобы прекратить обработку пользователей, или просто полностью удалите бит if null continue, так как цикл while будет вырываться, как только пользователь будет равно null.

Ответ 5

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

Ответ 6

Короткий ответ yes, continue (и break) корректно работают во время циклов while.

Как отмечали другие, из примера видно, что вы можете ожидать продолжения неправильного поведения.

Ответ 7

Посмотрим:

$cat DoWhileContinue.java 
class DoWhileContinue {

    public static void main( String [] args ) {
        int i = 0;
        int y = 0;
        do {
            i++;
            if( i > 100 ) {
                continue;
            }
            y++;

        } while( i < 500  );
        System.out.printf("i=%d, y=%d %n", i, y );
    }
}
$javac DoWhileContinue.java 
$java DoWhileContinue
i=500, y=100 

Да, да. В этом примере вы можете увидеть y значение 100, потому что оператор continue был выполнен и не позволил впоследствии увеличить переменную.