Java | 実務でよくあるインクリメント関連のバグパターン

Java Java
スポンサーリンク

実務でよくあるインクリメント関連のバグパターン

では「実務でありがちなインクリメント忘れや境界条件ミス」の典型例を整理してみましょう。


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]);
}
Java
  • i > 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 を基本にする

💡 実務では「動くコード」より「読みやすくて安全なコード」が評価されます。
インクリメントは便利ですが、境界条件と副作用に注意することが最大のポイントです。

タイトルとURLをコピーしました