実務でよくあるインクリメント関連のバグパターン
では「実務でありがちなインクリメント忘れや境界条件ミス」の典型例を整理してみましょう。
1. インクリメント忘れによる無限ループ
int i = 0;
while (i < 5) {
System.out.println(i);
// i++ を書き忘れ → 永遠に i=0 のまま
}
Java👉 対策: ループの最後に必ず i++ を入れる。
👉 実務では for文を使う方が安全(for (int i=0; i<5; i++))。
2. 境界条件の off-by-one エラー
for (int i = 0; i <= arr.length; i++) {
System.out.println(arr[i]); // ❌ 最後で範囲外アクセス
}
Java<=にしてしまうとarr.lengthに到達し、ArrayIndexOutOfBoundsException。
👉 正しくは< arr.length。
3. 逆順ループの条件ミス
for (int i = arr.length - 1; i > 0; i--) {
System.out.println(arr[i]);
}
Javai > 0にするとarr[0]が出力されない。
👉 正しくはi >= 0。
4. 配列アクセスとインクリメントの混乱
int[] arr = {10, 20, 30};
int i = 0;
while (i < arr.length) {
System.out.println(arr[++i]); // ❌ 最初の要素が飛ばされる
}
Java++iにすると最初のarr[0]がスキップされる。
👉 正しくはarr[i++]。
5. 複数インクリメントでの意図しない増加
int i = 0;
if (arr[i++] == 10 && arr[i++] == 20) {
// i が2回増えてしまう
}
Java👉 対策: 条件式にインクリメントを埋め込まない。
👉 先に変数に代入してから判定する。
6. 小さい型でのオーバーフロー
byte b = 127;
b++;
System.out.println(b); // -128 に戻る
Java👉 実務では基本的に int を使うのが安全。
実務での安全策まとめ
- ループは for文で書く(インクリメント忘れを防ぐ)
- 条件は
<を基本にする(<=は要注意) - 逆順ループは
i >= 0 - 配列アクセスは
arr[i++]を使うと自然 - 条件式に ++/– を埋め込まない
- 型は int を基本にする
💡 実務では「動くコード」より「読みやすくて安全なコード」が評価されます。
インクリメントは便利ですが、境界条件と副作用に注意することが最大のポイントです。
