Java 在一段时间内继续工作吗?
我有一段时间,看起来像:Java 在一段时间内继续工作吗?,java,loops,do-while,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
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语句?continue将跳转到while中的循环求值语句,它看起来是多余的,因为if和while正在求值相同的东西。我认为最好使用中断或简单地让while条件完成工作(您的while条件已经在为您检查它)是的,
继续
将在do..while循环中工作
您可能希望使用
break
而不是continue
来停止处理用户,或者完全删除if null continue
位,因为只要用户为null,while循环就会立即中断。简短回答是,continue(和break)在do while循环中正常工作
但是,正如其他人指出的那样,从这个示例来看,您可能期望continue出现错误的行为。为什么要在两个地方测试用户?当用户为空时,while条件将终止循环,这是您想要的。continue使其跳转到botton处的求值,以便程序可以求值是否必须继续进行另一次迭代或退出。在这种情况下,它将退出 这是规范:
您可以在Java语言规范中搜索此类语言问题:这确实不是编写此代码的最佳方式。如果user为null,那么下次尝试获取user.id时将得到一个NullPointerException。更好的方法是:
User user = UserDao.Get(1);
while(user != null) {
// do something with the user
user = UserDao.GetNext(user.id);
}
让我们看看:
$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
$cat DoWhileContinue.java
类DoWhileContinue{
公共静态void main(字符串[]args){
int i=0;
int y=0;
做{
i++;
如果(i>100){
继续;
}
y++;
}而(i<500);
System.out.printf(“i=%d,y=%d%n”,i,y);
}
}
$javac DoWhileContinue.java
$java DoWhileContinue
i=500,y=100
是的。在本示例中,您可以看到
y
值为100
,因为执行了continue
语句,并阻止了变量随后增加。为什么不尝试一下呢?这肯定比写一个问题要快…看起来很奇怪。你应该简化代码。你想干什么?获取第一个非空用户?或者处理所有非空用户?你什么时候知道没有更多的用户?(do/while表示null表示用户的结束…但是if..continue表示在…:S之间有null用户)作为一个谜题很有趣,但实际上我从未使用do-while循环。有点争议的是,我也从不使用continue。在谷歌上搜索并找到这个问题要比编写代码快得多。。。幸好布拉先生写了这个问题,而不是仅仅尝试一下!人们似乎不理解stackoverflow的想法。这个问题不仅对布拉先生有帮助,而且可能对数百名谷歌用户也有帮助。这可能是一个可怜的例子,但meriton的arument完全无效。continue
表示在不经过循环体其余部分的情况下计算while
条件。它当然不会简单地重复循环(-1)是的,你是对的。我混淆了while{},在本例中,它将进入循环的顶部并再次求值。