我有一段时间看起来像:
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语句?
答案 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
语句已执行并阻止变量随后增加。