Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在一段时间内继续工作吗?_Java_Loops_Do While - Fatal编程技术网

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{},在本例中,它将进入循环的顶部并再次求值。