2016-03-27 2 views
0

私は、友人の証拠が正の整数でないことを知るために短いテストを作成しています.2回書かれたとき(つまり10-> 1010)は完璧です平方。私はそれを実行すると数学的証明を試すときにエラーが発生する

package checker; 

import static java.lang.Math.*; 

public class Checker { 

    public static void main(String[] args) { 
     for(int i=10001; i<1000000; i++) { 
      String repeat = i + "" + i; 
      int x = Integer.valueOf(repeat); 
      double root = Math.sqrt(x); 

      if (root == Math.floor(root) && !Double.isInfinite(root)) { 
       System.out.println("When " + i + " is repeated and the root is taken of it, the result, " + x 
       + " IS a perfect square."); 
      } 
     } 
    } 
}; 

私はエラーを取得する:

Exception in thread "main" java.lang.NumberFormatException: For input string: "2147521475" 
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
at java.lang.Integer.parseInt(Integer.java:583) 
at java.lang.Integer.valueOf(Integer.java:766) 
at checker.Checker.main(Checker.java:11) 

私は、Javaにかなり新しいですので、私は全体の多くを理解していません。ヘルプは高く評価されます。ありがとう。

+1

それはintergerの範囲外です。整数の最大値は2147483647です – Naruto

答えて

0

Javaでintで表すことができる最大値は2,147,483,647です。解析しようとしている値(2,147,521,475)が大きすぎてintとして表示されません。

NumberFormatExceptionは、文字列 "2147521475"を整数として解析できないというJavaの方法です。

intではなくlongを使用している場合(つまり、int x = Integer.valueOfからlong x = Long.valueOfに変更)はOKです。

0

intの最大値は、あなたの番号、2147521475は、この値を超える2 -1、または2147483647である(そして、あなたのプログラムをしようとする最初のそのような数です)。

一時的なストップギャップとして、long x = Long.valueOf(repeat)を使用する(最大値は2 -1)を使用できます。

しかし、これはやがて(ただし、使用するコンピュータやアルゴリズムによっては時間がかかりますが)壊れてしまいます。その場合はBigIntegerを使用できます。

0

intデータ型は32ビット符号付き2の補数です。 最小値は、 - 2,147,483,648。( - 2^31) 最大値は2,147,483,647(両端を含む)であり、(2^31 -1)

使用long

public static void main(String[] args) { 
    for(long i=10001; i<1000000; i++) { 
     String repeat = i + "" + i; 
     long x = Long.valueOf(repeat); 
     double root = Math.sqrt(x); 

     if (root == Math.floor(root) && !Double.isInfinite(root)) { 
      System.out.println("When " + i + " is repeated and the root is taken of it, the result, " + x 
      + " IS a perfect square."); 
     } 
    } 
} 
関連する問題