确实在继续工作吗?

时间:2010-01-06 21:47:28

标签: java loops do-while

我有一段时间看起来像:

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语句?

7 个答案:

答案 0 :(得分:34)

继续使它跳转到botton处的评估,因此程序可以评估是否必须继续进行另一次迭代或退出。在这种情况下,它将退出。

这是规范:http://java.sun.com/docs/books/jls/third_edition/html/statements.html#6045

您可以在Java语言规范中搜索这些语言问题:http://java.sun.com/docs/books/jls/

答案 1 :(得分:4)

这实际上不是编写此代码的最佳方式。如果user为null,则在下次尝试获取user.id时会出现NullPointerException。更好的方法是:

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

答案 2 :(得分:3)

为什么要在两个地方测试用户?当用户为空时,while条件将终止循环,这就是你想要的。

答案 3 :(得分:2)

是的,continue将在do..while循环中运行。

您可能希望使用break代替continue来停止处理用户,或者只是完全删除if null continue位,因为只要用户为null,while循环就会中断反正。

答案 4 :(得分:0)

继续将跳转到while内部的循环评估语句,这看起来多余,因为你的if和while正在评估同样的事情。我认为最好使用休息时间或者让while条件完成工作(你的条件已经为你检查了)

答案 5 :(得分:0)

简短回答是的,继续(和休息)在do while循环中正常工作。

正如其他人所指出的那样,从这个例子来看,你可能会期待继续做错的行为。

答案 6 :(得分: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语句已执行并阻止变量随后增加。