2

一个简单的问题,比如说,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() 条件不满足,则首先中断循环。

谢谢。

4

8 回答 8

8

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

首先更改breaktocontinue将使它们以相同的方式工作。

于 2010-10-20T01:37:23.967 回答
1

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

于 2010-10-20T01:36:47.557 回答
0

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

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

您是打算拥有两个不同的命名函数还是应该将它们都称为 dosomething() ?

于 2010-10-20T01:50:02.503 回答
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();
}

还有其他选择,你的澄清仍然不清楚......无论如何对我来说......

于 2010-10-20T01:52:23.417 回答
0

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

  1. 将在第一次找到空车时终止循环,isEmpty 在第一个空车之后跳过任何车。您可以像 2 一样进行这项工作。如果您将 ' break' 更改为 ' continue'

  2. 将为所有非空车做一些事情。

于 2010-10-20T01:37:56.717 回答
0

取决于您要做什么,第一个循环将在满足条件后立即结束,而第二个循环将遍历所有哈希图。

于 2010-10-20T01:38:14.930 回答
0

如果您实际上的意思是“继续”而不是“中断”,那么我会说不使用继续或中断会更好。

这没什么大不了的,但是像 continue、break 和 return 这样的语句本质上都是经过修饰的 goto 语句。他们不是转到一行或转到一个标签,而是转到控制结构的顶部或底部——这使得程序员在跟踪它时不得不考虑一下,这意味着浪费时间和额外的错误机会。

这不是什么大不了的事,而且很多时候这些结构实际上会澄清你的代码,但如果你有一个选择,而且它们似乎在本质上做同样的事情,那就走不涉及将控制权发送到其他地方的方式。

于 2010-10-20T01:44:06.663 回答
0

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

for (Car car : carList) {
   if (car.isEmpty) {
      doSomething();
   }
   else {
      doSomethingElse();
   }
}
于 2010-10-20T01:46:15.410 回答