今回はJava Silver試験にもよく出題される、繰り返し文とbreakの使用に関する問題です。
問題
次のコードを実行した場合に出力される結果は何でしょうか?最も正しい選択肢を選んでください。
public class LoopTest {
public static void main(String[] args) {
int i = 0;
while (i < 5) {
if (i == 3) {
break;
}
System.out.println("i: " + i);
i++;
}
}
}
選択肢
- A. i: 0 i: 1 i: 2
- B. i: 0 i: 1 i: 2 i: 3 i: 4
- C. コンパイルエラー
- D. i: 0 i: 1 i: 2 i: 3
答えと解説
回答を見る
答え
A. i: 0 i: 1 i: 2
解説
基本説明:
今回の問題では、while
ループとbreak
ステートメントが使用されています。
while
ループは条件がtrue
の間実行されるため、このコードの場合、i
が5より小さい間、ループは続きます。
ただし、途中でi
が3になった時にbreak
が実行され、ループを中断します。
したがって、実際に出力されるのはi: 0
, i: 1
, i: 2
の3つだけです。
誤答理由:
選択肢Bのようにi: 3
やi: 4
が表示されると誤解することがありますが、
break
が実行されるとその時点でループが終了します。
i
が4になってループの条件を満たさないことはありません。
選択肢Dも似た誤りです。ここでもi == 3
が条件によりbreak
でループは終了します。
つまずきポイント:
初心者がよくつまずくポイントは、break
の動作についての理解不足です。
break
はループ全体を終了させるものであるため、部分的にスキップするcontinue
とは異なります。
また、コードのフローを読む際に、何が出力されるのかを頭の中で考えるのは難しいことがあります。 そのため、実際に手を動かしてコードを書く練習をすることがお勧めです。
発展知識:
繰り返し文にはさまざまな書き方があり、for
ループやdo-while
ループもJavaでは一般的です。
ループ制御に関しては、break
だけでなくcontinue
もきちんと理解しておくことが大事です。
continue
は現在のイテレーションをスキップし、ループを次のイテレーションに進める役割を持ちます。
これらの制御ステートメントを活用することで、効率的に特定の操作を反復させたり、無駄な処理を減らすことができます。 開発の現場では、これらの制御フローを適切に活用することが、プログラムのパフォーマンス向上やコードの可読性に繋がるため、しっかり理解しておきましょう。