在 Java 中退出循环的最佳方法是什么?
What is the best way to exit loop in Java?
在 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++;
}
有些人可能会发现 break
更难调试(就个人而言,我更喜欢使用 flag
),但这主要是见仁见智。
想象一个包含 500 多行代码的 loop
主体,到处都有一些 break
语句,您可能更难想象退出 loop
的所有可能性].
我喜欢使用 flag
的另一个原因是您可以为结束点指定一个有意义的名称,而不是简单地 break
.
请注意,您还可以在 for
循环示例中使用 flag
:
boolean flag = false;
for(int i = 0; !flag && i < 10; i++) {
// some treatment
}
然而,有趣的是,在处理循环时,有一个 continue
关键字,它允许您不 exit
循环,而是直接 skip
下一个 iteration
.
What is the best way to finish a loop in Java?
如果两者之间确实存在最佳方式,Java
可能不会允许另一个 ;)
我想最重要的是使用与您的 co-worker
相同的约定,因此代码与 class 和 class 没有区别。
我看你说的"best"是什么意思?使用 break,您可以提前退出循环,这样效率更高。
我更喜欢第一个,因为 goto
被认为是有害的。 exit
就像 goto
。但更重要的是:在编写 if
子句时请始终使用 {}
。
此外,在使用条件时,请为其命名。理解 ageBelow18
而不是 today.getYear() < customer.getBirthday().getYear();
几乎更简单(代码不正确,我知道)。
break
存在是有原因的,对吧!
while(a < 5){
if(a == 3)
break;
else
a++;
}
非常简单的答案,休息一下,更少的标志,更少的调试,更容易维护。从 while
循环更改为 for
循环很简单,无需对逻辑进行任何修改。想想你需要添加更多条件的场景......
我的意见是,如果你不了解break
和continue
的用法,那么你可能会一直去拿flag。但答案不止一个。你的问题是什么选项更适合退出循环,从你的两个例子来看,选项很简单。我的意见是break
。
现在有些人会使用标志,有些人会使用中断,他们会提供更适合的代码示例。但这不是你的问题!
我可以给你很多例子,其中一些我会选择 flag
,另一些我会选择 break
,还有一些是两者的混合。这取决于我的循环将要处理的内容。
break
就是标志如果达到这个条件就emiditely跳出循环。这在某些循环逻辑中非常重要。
即使 you/co-worker 在该条件之前或之后添加更多逻辑,循环仍会在到达 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");
}
}
第一个片段在语法上是错误的 - =
是赋值运算符。您正在寻找相等运算符 ==
:
while ((a < 5) && (exit == false)) {
或者更好,因为 exit
是一个 boolean
,直接计算它:
while (a < 5 && !exit) {
除此之外,您应该始终努力遵循您正在从事的项目的惯例。如果它的编码风格更喜欢 break
s - 就使用它们。如果它禁止他们,不要。
一旦您将项目指南考虑事项排除在 window 之外,这完全是一个偏好问题。就个人而言,我倾向于使用 break
语句,尤其是当我有多个条件需要评估时。例如:
while (a < 5) {
// do stuff
if (a == 3) {
break;
}
// do more stuff
if (b >= 19) {
break;
}
// etc...
}
但最终,您应该根据具体情况进行评估。像我一样偏爱 break
s 并不意味着你应该盲目地 总是 使用它们。选择使代码看起来更好且更易于维护的任何内容。
您提供的这两个选项都不如两个备选方案好。
简单对比一下直接退出循环,最好的选择是:
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)
表明退出循环的唯一方法是使用 break,因此程序员应该留意它们。中断也应该在循环体的顶部组合在一起,因此它们充当守卫,防止在满足条件时执行循环体。
我会选择 break 语句,因为:
- 代码更干净
- 不需要额外的代码声明
- 调试代码更容易
- 混淆在条件下声明的许多标志是很常见的。您不会希望在同一行上获得很多嵌套条件。
还存在 continue 关键字,可让您在必要时跳过部分代码。
在 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++;
}
有些人可能会发现 break
更难调试(就个人而言,我更喜欢使用 flag
),但这主要是见仁见智。
想象一个包含 500 多行代码的 loop
主体,到处都有一些 break
语句,您可能更难想象退出 loop
的所有可能性].
我喜欢使用 flag
的另一个原因是您可以为结束点指定一个有意义的名称,而不是简单地 break
.
请注意,您还可以在 for
循环示例中使用 flag
:
boolean flag = false;
for(int i = 0; !flag && i < 10; i++) {
// some treatment
}
然而,有趣的是,在处理循环时,有一个 continue
关键字,它允许您不 exit
循环,而是直接 skip
下一个 iteration
.
What is the best way to finish a loop in Java?
如果两者之间确实存在最佳方式,Java
可能不会允许另一个 ;)
我想最重要的是使用与您的 co-worker
相同的约定,因此代码与 class 和 class 没有区别。
我看你说的"best"是什么意思?使用 break,您可以提前退出循环,这样效率更高。
我更喜欢第一个,因为 goto
被认为是有害的。 exit
就像 goto
。但更重要的是:在编写 if
子句时请始终使用 {}
。
此外,在使用条件时,请为其命名。理解 ageBelow18
而不是 today.getYear() < customer.getBirthday().getYear();
几乎更简单(代码不正确,我知道)。
break
存在是有原因的,对吧!
while(a < 5){
if(a == 3)
break;
else
a++;
}
非常简单的答案,休息一下,更少的标志,更少的调试,更容易维护。从 while
循环更改为 for
循环很简单,无需对逻辑进行任何修改。想想你需要添加更多条件的场景......
我的意见是,如果你不了解break
和continue
的用法,那么你可能会一直去拿flag。但答案不止一个。你的问题是什么选项更适合退出循环,从你的两个例子来看,选项很简单。我的意见是break
。
现在有些人会使用标志,有些人会使用中断,他们会提供更适合的代码示例。但这不是你的问题!
我可以给你很多例子,其中一些我会选择 flag
,另一些我会选择 break
,还有一些是两者的混合。这取决于我的循环将要处理的内容。
break
就是标志如果达到这个条件就emiditely跳出循环。这在某些循环逻辑中非常重要。
即使 you/co-worker 在该条件之前或之后添加更多逻辑,循环仍会在到达 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");
}
}
第一个片段在语法上是错误的 - =
是赋值运算符。您正在寻找相等运算符 ==
:
while ((a < 5) && (exit == false)) {
或者更好,因为 exit
是一个 boolean
,直接计算它:
while (a < 5 && !exit) {
除此之外,您应该始终努力遵循您正在从事的项目的惯例。如果它的编码风格更喜欢 break
s - 就使用它们。如果它禁止他们,不要。
一旦您将项目指南考虑事项排除在 window 之外,这完全是一个偏好问题。就个人而言,我倾向于使用 break
语句,尤其是当我有多个条件需要评估时。例如:
while (a < 5) {
// do stuff
if (a == 3) {
break;
}
// do more stuff
if (b >= 19) {
break;
}
// etc...
}
但最终,您应该根据具体情况进行评估。像我一样偏爱 break
s 并不意味着你应该盲目地 总是 使用它们。选择使代码看起来更好且更易于维护的任何内容。
您提供的这两个选项都不如两个备选方案好。
简单对比一下直接退出循环,最好的选择是:
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)
表明退出循环的唯一方法是使用 break,因此程序员应该留意它们。中断也应该在循环体的顶部组合在一起,因此它们充当守卫,防止在满足条件时执行循环体。
我会选择 break 语句,因为:
- 代码更干净
- 不需要额外的代码声明
- 调试代码更容易
- 混淆在条件下声明的许多标志是很常见的。您不会希望在同一行上获得很多嵌套条件。
还存在 continue 关键字,可让您在必要时跳过部分代码。