Вопрос

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

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, а user равно null, так что все сломается?

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

Короткий ответ да, продолжайте (и прерывайте) работу должным образом в циклах do while.

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

Давайте посмотрим:

$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 инструкция была выполнена и предотвратила последующее увеличение переменной.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top