Как выйти из двух вложенных циклов

Я использую 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, 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;
   }
}

Ответ 2

Да, вы можете написать разрыв с меткой, например:

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

Вы можете reset переменные управления контуром.

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

Вы не должны использовать метки на объективном языке. Вам нужно переписать условие /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 are 55