如何退出两个嵌套循环?

fir*_*w52 42 java loops break nested-loops

我已经使用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;
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这个目标?

sir*_*nce 83

在Java中,您可以使用标签指定要中断/继续的循环:

mainLoop:
while (goal <= 100) {
   for (int i = 0; i < goal; i++) {
      if (points > 50) {
         break mainLoop;
      }
      points += i;
   }
}
Run Code Online (Sandbox Code Playgroud)

  • @ziyao,只要代码清楚发生了什么(目的地在goto附近)它很好,恕我直言清洁 (2认同)
  • http://xkcd.com/292/,那说,PHP允许你"打破2"; Java版本更干净,可维护恕我直言. (2认同)
  • 是的,虽然我通常更喜欢在一个额外的函数中封装内部循环,因为这通常更清晰,使用goto肯定比使用额外的布尔变量并设置它更清晰. (2认同)

Grz*_*ski 19

是的,你可以用标签写下符号,例如:

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;
Run Code Online (Sandbox Code Playgroud)


Dan*_*Tao 6

有很多方法可以给这只猫上皮.这是一个:

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;
   }
}
Run Code Online (Sandbox Code Playgroud)

更新:哇,不知道打破标签.这似乎是一个更好的解决方案.