是否在for循环中使用break?

时间:2010-10-20 01:35:01

标签: java break

一个简单的问题,比方说,Car类扩展了HashMap(String,String)。

1

for (Car car : carList) {
    if (car.isEmpty) {
        break;
    }
    doSomething();
}

2

for (Car car : carList) {
    if (!car.isEmpty) {
        doSomethingElse();
    }
}

以上哪两种更好? 感谢。

----编辑---- 对不起,我没有说清楚。

doSomething()方法实际上做了不同的事情。 我把它们改成了doSomething()和doSometingElse()。

我的问题是,你是否将所有过程放在一个if()中?或者,如果if()条件不满足,则首先打破循环。

感谢。

8 个答案:

答案 0 :(得分:8)

他们完全不同的事情。前者将在条件为真时立即停止迭代,而后者仅在条件为假的迭代期间跳过处理。

将第一个break更改为continue会使它们的工作方式相同。

答案 1 :(得分:1)

他们完全不同的事情。第一个人在看到第一辆空车后会停下来。第二个版本将为每辆非空车“做点什么”。我想,您可能希望使用continue运算符而不是break

答案 2 :(得分:0)

这两个循环不会做同样的事情

  1. 将在第一次找到空车时终止循环,isEmpty在第一个空车后跳过任何车辆。您可以将此工作设为2.如果您将“break”更改为“continue

  2. 将为所有非空车做点什么。

答案 3 :(得分:0)

取决于你想要做什么,第一个循环将在条件满足后立即结束,而第二个循环将通过所有hashmap迭代。

答案 4 :(得分:0)

如果你的意思是“继续”而不是“休息”,那么我会说不使用继续或休息更好。

这不是什么大不了的事,但是像继续,休息和回归这样的陈述都是基本上已经装扮一下的goto语句。它不是转到一行或转到标签,而是转到控制结构的顶部或底部 - 这使得程序员在跟踪它时必须考虑一点,这意味着浪费时间和错误的额外机会。

这不是一个非常大的交易,很多时候这些结构实际上会澄清你的代码,但是如果你有一个选择并且他们似乎做了基本相同的事情,那么就不要在其他地方发送控制权。

答案 5 :(得分:0)

如果您想根据汽车是否为空而需要不同的行为,则可以使用if else语句。如果你想停止迭代carList,请使用break。

for (Car car : carList) {
   if (car.isEmpty) {
      doSomething();
   }
   else {
      doSomethingElse();
   }
}

答案 6 :(得分:0)

正如大家所指出的那样,破解版将提前退出。 答案取决于你想要它做什么。

如果你已经完成了你需要做的事情,那么一旦你完成就会爆发。为什么浪费CPU周期?另一方面,如果你必须通过整个列表dosomethingelse()然后不要爆发。

你是想要有两个不同的命名函数,还是应该都叫dosomething()?

答案 7 :(得分:0)

这是你要找的吗?

for (Car car : carList) {
    if (car.isEmpty) {
         doSomething();
    }
    else {
         doSomethingElse();
    }       
}

或者您正在寻找

for (Car car : carList) {
    if (car.isEmpty) {
       break; 
       //STOP ITERATING THROUGH THE REST OF THE LIST 
       //(doSomething & soSomethingElse may have been called a few times already)
    }
    else {
        doSomething();
    }
    doSomethingElse();
}

还有其他选择,无论如何,你的澄清仍然不明确......