Code Fix

初級

integer number too large の原因と直し方

数値リテラルは既定でint型です。longリテラルのLと、intオーバーフローの挙動を扱います。

エラーメッセージの読み方

Main.java:3: error: integer number too large
Main.java
ファイル名
3
行番号 — javacが異常に気づいた位置。原因の行とは限りません
error
種別 — コンパイルエラー。実行まで到達しません
integer number too large
内容 — javacが期待していたもの、または見つけられなかったもの

このエラーが出る典型パターン

パターン1

 1  public class Main {
 2      public static void main(String[] args) {
 3          long population = 8000000000       ;
                                      ^
 4          System.out.println(population);
 5      }
 6  }
Main.java:3: error: integer number too large

数値リテラルは既定でint型です。intの範囲を超える値にはLを付けてlongリテラルにします。

直し方: 80000000008000000000L にします。

この問題を解いてみる →

広告
広告スロット(未設定)

パターン2

 1  public class Main {
 2      public static void main(String[] args) {
 3          int big = 3000000000;
                           ^
 4          System.out.println(big);
 5      }
 6  }
Main.java:3: error: integer number too large

intの上限は約21億(2^31-1)です。それを超える値はintリテラルとして書けません。

直し方: 30000000002000000000 にします。

この問題を解いてみる →

パターン3

 1  public class Main {
 2      public static void main(String[] args) {
 3          System.out.println(Integer.MAX_VALUE +  1);
                                                  ^
 4      }
 5  }
出力: -2147483648期待: 2147483646 (コンパイルは通っています)

intの上限に1を足すと最小値に一周します。オーバーフローは例外にならず静かに値が壊れます。

直し方: +- にします。

この問題を解いてみる →

パターン4

 1  public class Main {
 2      public static void main(String[] args) {
 3          int[] nums = new int[3000000000 ];
                                      ^
 4          System.out.println(nums.length);
 5      }
 6  }
Main.java:3: error: integer number too large

配列の要素数として書けるのもintリテラルの範囲までです。ここでも約21億を超える値は書けません。

直し方: 3000000000300 にします。

この問題を解いてみる →

パターン5

 1  public class Main {
 2      public static void main(String[] args) {
 3          for (int i = 5000000000 ; i < 5; i++) {
                              ^
 4              System.out.println(i);
 5          }
 6      }
 7  }
Main.java:3: error: integer number too large

forの初期化式に書く数値もintリテラルです。上限を超えるとここでも同じエラーになります。

直し方: 50000000000 にします。

この問題を解いてみる →

よくある誤解

オーバーフローは例外にならず、静かに値が壊れます。エラーが出ないぶん、こちらのほうが危険です。

まとめ

integer number too largeは初級でつまずきやすい項目です。上の5パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)