0

Java Scanner を使用して、テキスト ファイル (File.txt) から 20 桁の長さを読み取ろうとしています。

java.util.Scanner filereader = new java.util.Scanner(new File("File.txt"));
longNumber = (long) filereader.nextLong();

これにより、次のエラーが返されます。

Exception in thread "main" java.util.InputMismatchException: For input string: "37107287533902102798"
at java.util.Scanner.nextLong(Scanner.java:2271)
at java.util.Scanner.nextLong(Scanner.java:2225)
at scanner.Scanner.main(Scanner.java:14)

数字の長さを 19 桁以下に減らすと、問題なく動作します。誰かがこれを20桁以上に使用する方法を説明できますか?

4

2 に答える 2

6

long無限長の数値を格納することはできません。までしか上がりません(2^63)-1。こちらをご覧ください: (リンク)。

long データ型は、64 ビットの符号付き 2 の補数整数です。最小値は -9,223,372,036,854,775,808 で、最大値は 9,223,372,036,854,775,807 (包括的) です。int によって提供される値よりも広い範囲の値が必要な場合は、このデータ型を使用します。

BigIntegerそれをさらに多くの桁で使用するには、 (ドキュメントへのリンク) を使用する必要があります。

java.util.Scanner filereader = new java.util.Scanner(new File("File.txt"));
bigInt = new BigInteger(filereader.nextLine());
于 2013-01-04T14:45:38.280 に答える
1

37107287533902102798 は明らかに長距離範囲外であるため、例外が発生します。

そのような値を読み取るには BigInteger を使用する必要があります。

BigInteger in = new BigInteger("37107287533902102798");
于 2013-01-04T14:45:40.747 に答える