1

変数に格納しようとすると問題が発生し6000000000ますint

これは私が問題を抱えているスクリプトの一部です:

Scanner x = new Scanner(System.in);
System.out.println("Please enter a number here:");
int k = x.nextInt();
System.out.println(k);

入力6000000000すると出力は同じになるはずですが、出力は次のエラーです。

Exception in thread "main" java.util.InputMismatchException: For input string: "6000000000"
    at java.util.Scanner.nextInt(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)

これは何ですか?これを防ぐ方法は?

4

4 に答える 4

8

値が大きすぎるため、Javaintは–2,147,483,648から2,147,483,647までの値しか保持できません。

long代わりに使用してください。

于 2012-08-09T15:31:36.187 に答える
1

longとを使用してnextLongください。あなたの数は:よりも大きいInteger.MAX_INTです2^31 - 1

また、を使用して最初にストリームをテストすると、このエラーが発生する可能性があることに注意してくださいhasNextInt()

于 2012-08-09T15:32:04.347 に答える
0

ここintで、の最大値がであることがわかります2,147,483,647 = 2^31 - 1long代わりに試してください:

long k = x.nextLong();
System.out.println(k);

longまであなたを連れて行きます9,223,372,036,854,775,807 = 2^63 - 1。それ以上の値が必要になったら、BigInteger( )を調べるか、 ( )Scanner#nextBigInteger()のような浮動小数点数を使用することができます。doubleScanner#nextDouble()

于 2012-08-09T15:34:02.860 に答える
0

または、非常に大きな数(longよりも大きい)を使用している場合は、nextBigIntegerを使用します

于 2012-08-09T15:39:01.540 に答える