【问题标题】:How to break out of while loop within for loop如何在for循环中跳出while循环
【发布时间】:2019-05-16 09:57:11
【问题描述】:

我需要彻底跳出 while 循环(空检查)并进入外部 for 循环的下一次迭代。

我试过放

for(Product: product:ListofProducts){
 while(null!=product.getDate){
    if(product.getDate>specifiedDate){
        doOnething()
    }
    else{
        doAnotherThing()
    }
    continue;
}

如果产品日期不为 null 并且它执行 onething() 或 anotherthing() ,那么我想进入 for 循环的下一次迭代

【问题讨论】:

  • 将 product.getDate() 设置为 null
  • 使用“break”命令
  • 你可以标记你的 for 循环 nameofloop: for(Product: product:ListofProducts){..} 然后 continue nameofloop;
  • 您在任何情况下都在继续while 循环,这是需要的吗?在这种情况下,我真的不知道while 循环的必要性,无论如何......你为什么要使用它?
  • 可以用if代替while,是不是期望不一样?

标签: java for-loop while-loop


【解决方案1】:

有几种方法。

您可以在内部循环中break

for(...) {
    while(...) {
       ... 
       if(condition) {
          break;
       }
       ...
    }
 }

这将离开内循环,外循环将继续。

或者您可以标记外部循环,并在名称中使用continue。默认情况下,continuebreak 应用于最内层循环,但使用名称会覆盖它。

someName: for(...) {
    while(...) {
       ... 
       if(condition) {
          continue someName;
       }
       ...
    }
 }

或者,您通常可以在没有breakcontinue 的情况下实现它:

for(...) {
    boolean done = false;
    while(... && !done) {
       ... 
       if(condition) {
          done = true;
       }
    }
 }

有些人建议避免使用breakcontinue,原因与他们建议在日常工作中避免使用return 的原因相同。例程有多个退出点是让读者感到困惑的机会。

但是,可以通过确保例程简短来缓解这种情况。问题是您的退出点会在长代码块中丢失。

【讨论】:

  • 我总是发现添加一个额外变量只是为了避免使用 breakbreak 本身更令人困惑。
  • @aSlug 我发现我编程的时间越长,我发现我需要做这些的次数就越少——但我不能完全弄清楚为什么会这样。
【解决方案2】:
for(Product: product:ListofProducts){
 boolean done = false;
 while(null!=product.getDate && !done){
    if(product.getDate>specifiedDate){
        doOnething();
        done = true;
    }
    else{
        doAnotherThing();
        done = true;
    }
    continue;
}

【讨论】:

  • 您的示例中的断开条件始终满足。您要么不进入内部循环,要么在第一次迭代后立即离开。您的答案复制了原始代码的缺陷
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-31
  • 2015-12-28
  • 1970-01-01
  • 2013-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多