работает ли continue через некоторое время?
Вопрос
У меня пока есть дела, которые выглядят как:
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 уже проверяет это за вас)