はじめに
for文はシンプルで便利だけど、ちょっとした書き方ミスが思わぬエラーや不具合を招くこともあるよ。今回は番外編として、よくあるfor文のエラーパターンをまとめたよ。エラーの原因と出力例をセットで確認して、初心者でも「何が間違いか」をすぐに理解できるようにしてみた。
1. 添字ミス
例:i <= arr.length
による配列範囲外アクセス
int[] arr = {1, 2, 3};
for (int i = 0; i <= arr.length; i++) { // <= が原因でエラー
System.out.println(arr[i]); // IndexOutOfBoundsException
}
出力例
1
2
3
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
対策:配列の末尾まで回すときは < arr.length
を使う。
2. 無限ループ
例:更新忘れや条件ミス
for (int i = 0; i < 3; ) { // 更新式なし
System.out.println(i);
}
出力例(抜粋)
0
0
0
...(延々と続く)
対策:条件と更新の整合性を確認。終了条件を満たす増減が行われているか必ずチェック。
3. ++iとi++の混乱
例:意図と異なる値の出力
for (int i = 0; i < 3; ) {
System.out.println(++i); // 加算後の値を出力
}
出力例
1
2
3
例:意図する値の出力
for (int i = 0; i < 3; ) {
System.out.println(i++); // 出力後に加算
}
出力例
0
1
2
ポイント:
-
++i
は「加算してから使う」 -
i++
は「使ってから加算する」
対策:インクリメントのタイミングを意識して使い分ける。
カウンタ用途では違いが重要。
4. スコープ衝突
例:for内と外で同名変数を使用
int i = 0;
for (int i = 0; i < 5; i++) { // コンパイルエラー
System.out.println(i);
}
エラーメッセージ例
error: variable i is already defined in method main(String[])
対策:変数名の再利用は避ける。役割が明確な名前を付ける。
5. continue/breakの誤用
for (int i = 0; i < 5; i++) {
if (i == 2)
break; // 本当はスキップしたかったが終了してしまう
System.out.println(i);
}
出力例
0
1
対策:処理をスキップしたいならcontinue
、完全に抜けたいならbreak
を使う。
6. 境界条件の勘違い
for (int i = 10; i > 0; i++) { // 条件と更新の向きが逆
System.out.println(i); // 無限ループに近い動き
}
対策:開始値・終了条件・更新の方向が一致しているか必ず確認。
まとめ
- 添字や条件式の境界は丁寧に確認
- 更新忘れや方向ミスは無限ループの温床
- インクリメント位置・スコープの扱いに注意
- breakとcontinueは意図に応じて正しく選択
- 実行結果を予想するクセをつけるとバグ防止に効果的
あとがき
ここまで読んでくれて、本当にありがとうございました。
「プログラミングって難しい…」って思ってた人も、
「ちょっと楽しいかも…!」って思ってもらえたらうれしいな。
次の投稿も、よろしくおねがいします。
💬 コメント・フィードバック歓迎!
「この章わかりやすかった!」
「これ表現まちがってない?」
「次は○○をやってほしい!」などなど、
お気軽にコメントで教えてくださいね!