如何退出两个嵌套循环? [复制]
Posted
技术标签:
【中文标题】如何退出两个嵌套循环? [复制]【英文标题】:How do exit two nested loops? [duplicate] 【发布时间】:2011-10-02 01:44:05 【问题描述】:我使用 Java 已经有一段时间了,但我在循环方面的教育有些欠缺。我知道如何创建 Java 中存在的每个循环并跳出循环。但是,我最近想到了这个:
假设我有两个嵌套循环。我可以只使用一个
break
语句来打破这两个循环吗?
这是我目前所拥有的。
int points = 0;
int goal = 100;
while (goal <= 100)
for (int i = 0; i < goal; i++)
if (points > 50)
break; // For loop ends, but the while loop does not
// I know I could put a 'break' statement here and end
// the while loop, but I want to do it using just
// one 'break' statement.
points += i;
有没有办法做到这一点?
【问题讨论】:
【参考方案1】:在 Java 中,您可以使用标签来指定要中断/继续哪个循环:
mainLoop:
while (goal <= 100)
for (int i = 0; i < goal; i++)
if (points > 50)
break mainLoop;
points += i;
【讨论】:
@Grzegorz 我确实怀念过去不用有人指点我就可以使用 goto 的美好时光;) @ziyao 只要代码清楚发生了什么(目的地在 goto 附近)就可以了,恕我直言,更干净 xkcd.com/292,也就是说,php 允许你“打破 2;”恕我直言,Java 版本更干净且可维护。 是的,虽然我通常更喜欢将内部循环封装在一个额外的函数中,因为这通常更清晰,但使用 goto 肯定比使用额外的布尔变量并设置它更清晰。 我不敢相信我不知道这一点!非常感谢您的新课程!【参考方案2】:是的,你可以写break with label 例如:
int points = 0;
int goal = 100;
someLabel:
while (goal <= 100)
for (int i = 0; i < goal; i++)
if (points > 50)
break someLabel;
points += i;
// you are going here after break someLabel;
【讨论】:
【参考方案3】:有很多方法可以给这只猫剥皮。这是一个:
int points = 0;
int goal = 100;
boolean finished = false;
while (goal <= 100 && !finished)
for (int i = 0; i < goal; i++)
if (points > 50)
finished = true;
break;
points += i;
更新:哇,不知道打破标签。这似乎是一个更好的解决方案。
【讨论】:
谢谢!我希望我能接受所有的答案! 这很酷。不过,您的回答确实有道理。 :)【参考方案4】:小学,亲爱的华生……
int points = 0;
int goal = 100;
while (goal <= 100)
for (int i = 0; i < goal; i++)
if (points > 50)
goal++;
break;
points += i;
或
int points = 0;
int goalim = goal = 100;
while (goal <= goalim)
for (int i = 0; i < goal; i++)
if (points > 50)
goal = goalim + 1;
break;
points += i;
【讨论】:
【参考方案5】:您可以重置循环控制变量。
int points = 0;
int goal = 100;
while (goal <= 100)
for (int i = 0; i < goal; i++)
if (points > 50)
i = goal = 101;
points += i;
【讨论】:
【参考方案6】:您不应该在客观语言中使用标签。 你需要重写 for/while 条件。
所以你的代码应该是这样的:
int points = 0;
int goal = 100;
while (goal <= 100 && points <= 50)
for (int i = 0; i < goal && points <= 50; i++)
points += i;
// Now 'points' is 55
【讨论】:
这并不能真正回答问题。这更像是一个评论。 帖子已更新为示例代码 你说的“客观语言”是什么意思? Objective-C?以上是关于如何退出两个嵌套循环? [复制]的主要内容,如果未能解决你的问题,请参考以下文章