在Java中结束loop
的最佳方法是什么?
此:
boolean exit = false;
while((a < 5) && (exit = false)){
if(a == 3)
exit = true;
else
a++;
}
或者这个:
while((a < 5){
if(a == 3)
break;
else
a++;
}
答案 0 :(得分:4)
有些人可能会发现break
更难调试(个人而言,我更喜欢使用flag
)但主要是意见问题。
想象一个loop
主体,其中包含超过500行代码,其中一些break
语句位于各处,您可能更难以看到退出loop
的所有可能性。
我喜欢使用flag
的另一个原因是,您可以为结束点提供一个重要的名称,而不仅仅是break
。
请注意,您还可以在flag
循环示例中使用for
:
boolean flag = false;
for(int i = 0; !flag && i < 10; i++) {
// some treatment
}
然而,可能有趣的是,要知道在处理循环时,continue
关键字允许您不{@ 1}}循环,而exit
直接指向下一个skip
{1}}。
在Java中完成循环的最佳方法是什么?
如果两者之间确实存在最佳方式,iteration
可能不会允许另一方;)
我想最重要的是使用与Java
相同的约定,因此代码在不同类之间没有区别。
答案 1 :(得分:4)
break
存在是有原因的,对吧!
while(a < 5){
if(a == 3)
break;
else
a++;
}
非常简单的答案,去休息,减少标记,减少调试,更容易维护。在没有任何逻辑修改的情况下,从while
更改为for
循环很简单。想想你需要添加更多条件的场景......
我的意见是,如果您不理解break
和continue
的用法,那么您可能会一直寻找旗帜。但不仅有一个答案。你的问题是什么选项更适合退出循环,从你的两个例子中选项很简单。我的意见是break
。
现在有些人会使用旗帜,有些人会使用旗帜,他们会给出更适合的代码样本。但这不是你的问题!
我可以举出很多例子,其中一些我会选择flag
而另一些代表break
,其中一些是两者的混合。这取决于我的循环将要处理的内容。
break
是为了表明如果我们达到这个条件,我们将离开循环。这在某些循环逻辑中非常重要。
即使您/同事在该条件之前或之后添加更多逻辑,仍然会在到达break
的位置退出循环。
有时候你可能想要标记你已达到一个条件,但仍然希望通过循环所涵盖的所有指令,这里有一个bool帮助你停止循环但是在它通过所有逻辑之后。
如果你没有以正确的方式使用flag / break,你的系统可能会非常奇怪,特别是在添加新逻辑时。
请记住,您还可以使用break
和continue
标签,这不是很常见但很有用。
class ContinueWithLabelDemo {
public static void main(String[] args) {
String searchMe = "Look for a substring in me";
String substring = "sub";
boolean foundIt = false;
int max = searchMe.length() -
substring.length();
test:
for (int i = 0; i <= max; i++) {
int n = substring.length();
int j = i;
int k = 0;
while (n-- != 0) {
if (searchMe.charAt(j++) != substring.charAt(k++)) {
continue test;
}
}
foundIt = true;
break test;
}
System.out.println(foundIt ? "Found it" : "Didn't find it");
}
}
答案 2 :(得分:1)
第一个片段在语法上是错误的 - =
是赋值运算符。您正在寻找等于运算符==
:
while ((a < 5) && (exit == false)) {
或者更好,因为exit
是boolean
,只需直接评估它:
while (a < 5 && !exit) {
除此之外,您应该始终努力遵循您正在进行的项目的惯例。如果它的编码风格更喜欢break
s - 只需使用它们。如果它禁止它们,请不要。
一旦您将项目指南考虑因素抛到了窗外,这完全是一个偏好问题。就个人而言,我倾向于选择break
语句,特别是如果我有几个条件需要评估。 E.g:
while (a < 5) {
// do stuff
if (a == 3) {
break;
}
// do more stuff
if (b >= 19) {
break;
}
// etc...
}
但最终,您应该根据具体情况对其进行评估。像我一样喜欢break
,并不意味着你应该盲目地总是使用它们。选择使代码看起来更好,更易于维护的任何内容。
答案 3 :(得分:0)
我取决于你的意思&#34; best&#34; ?通过中断,您可以提前退出循环,这样效率会更高。
答案 4 :(得分:0)
我更喜欢第一种,因为goto
被视为有害。 exit
就像goto
一样。但更重要的是:在撰写{}
条款时请务必使用if
。
此外,使用条件时,请为其命名。理解ageBelow18
而不是today.getYear() < customer.getBirthday().getYear();
几乎更简单(代码不正确,我知道)。
答案 5 :(得分:0)
您提供的这些选项都不如两种选择。
看到你在简单比较后直接退出循环,那么最好的选择是:
while (a < 5 && a != 3) {
a++;
}
这是因为您需要在执行正文之前检查这两个条件,并且在退出循环时不需要做任何特殊的事情。
但是,如果在遇到某个条件时需要一些特殊逻辑,那么你应该使用while true循环并中断。
while (true) {
if (a >= 5) {
break; // nothing special, just exit
} else if (a == 3) {
a *= 2; // double a before exiting loop
break;
}
a++;
}
while (true)
表明退出循环的唯一方法是休息,所以程序员应该留意它们。断点也应该在循环体的顶部组合在一起,因此它们可以作为防护,防止循环体在其条件被击中时被执行。
答案 6 :(得分:0)
我会选择break语句:
还存在continue关键字,可以让您在必要时跳过部分代码。