2010-01-06 2 views
19

У меня есть сделать в то время, что выглядит следующим образом:действительно продолжает работать в то время как?

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) 

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

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

+30

Почему бы вам не попробовать? Это должно быть быстрее, чем писать вопрос ... – meriton

+2

Кажется довольно странным. Вы должны упростить код. Что ты пытаешься сделать? получение первого не нулевого пользователя? Или обрабатывать всех непустых пользователей? Когда вы знаете, что пользователей больше нет? (do/while предполагает, что null указывает конец пользователям ... но if..continue предполагает наличие нулевых пользователей между ...: S) – helios

+0

meriton: Я думал, что то же самое, но иногда эти люди На данный момент у вас есть компиляторы на своей машине (может быть или не быть здесь, хотя ...) –

ответ

31

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

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

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

0

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

+2

'continue' говорит, чтобы оценить состояние' while', не пройдя остаток тела цикла. Он, конечно, не просто повторяет цикл (-1) – xtofl

+0

Да, вы правы. Я смутился, пока {}, где в этом случае он переместится в верхнюю часть цикла и снова оценит. – Andres

2

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

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

0

Короткий ответ: да, продолжить (и сломать) правильно работать в режиме while.

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

3

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

4

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

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

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

$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 и предотвращение его увеличения после этого.

Смежные вопросы