web-dev-qa-db-ja.com

2つのネストされたループを終了するにはどうすればよいですか?

私はかなり以前からJavaを使用していましたが、ループでの教育にはやや欠けています。Java and break同様に、ループの外にも。しかし、私は最近これについて考えました:

2つのネストされたループがあるとします。 1つの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;
    }
}

これを達成する方法はありますか?

41
fireshadow52

Javaでは、ラベルを使用して、どのループを中断/継続するかを指定できます。

mainLoop:
while (goal <= 100) {
   for (int i = 0; i < goal; i++) {
      if (points > 50) {
         break mainLoop;
      }
      points += i;
   }
}
83
sirbrialliance

はい、書くことができます ラベル付きブレーク 例:

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;
19

この猫の皮を剥ぐ方法はたくさんあります。以下がその1つです。

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;
   }
}

更新:うわー、ラベルの破損については知りませんでした。それはより良い解決策のようです。

6
Dan Tao

小学校、親愛なるワトソン...

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;
  }
}
1
Blessed Geek

ループ制御変数をリセットできます。

int points = 0;
int goal = 100;
while (goal <= 100) {
   for (int i = 0; i < goal; i++) {
      if (points > 50) {
         i = goal = 101;
      }
   points += i;
   }
}
0
Dipto_Das

客観的な言語ではラベルを使用しないでください。 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
0
Kacper Obrzut