一个简单的问题,比方说,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()条件不满足,则首先打破循环。
感谢。
答案 0 :(得分:8)
他们完全不同的事情。前者将在条件为真时立即停止迭代,而后者仅在条件为假的迭代期间跳过处理。
将第一个break
更改为continue
会使它们的工作方式相同。
答案 1 :(得分:1)
他们完全不同的事情。第一个人在看到第一辆空车后会停下来。第二个版本将为每辆非空车“做点什么”。我想,您可能希望使用continue
运算符而不是break
。
答案 2 :(得分:0)
这两个循环不会做同样的事情
将在第一次找到空车时终止循环,isEmpty在第一个空车后跳过任何车辆。您可以将此工作设为2.如果您将“break
”更改为“continue
”
将为所有非空车做点什么。
答案 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();
}
还有其他选择,无论如何,你的澄清仍然不明确......