私はかなり以前から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;
}
}
これを達成する方法はありますか?
Javaでは、ラベルを使用して、どのループを中断/継続するかを指定できます。
mainLoop:
while (goal <= 100) {
for (int i = 0; i < goal; i++) {
if (points > 50) {
break mainLoop;
}
points += i;
}
}
はい、書くことができます ラベル付きブレーク 例:
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;
この猫の皮を剥ぐ方法はたくさんあります。以下がその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;
}
}
更新:うわー、ラベルの破損については知りませんでした。それはより良い解決策のようです。
小学校、親愛なるワトソン...
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;
}
}
ループ制御変数をリセットできます。
int points = 0;
int goal = 100;
while (goal <= 100) {
for (int i = 0; i < goal; i++) {
if (points > 50) {
i = goal = 101;
}
points += i;
}
}
客観的な言語ではラベルを使用しないでください。 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