2017-09-12 11 views
0

私のコーディングは、入力がユーザーからのものであってもクラッシュしないプログラムを作成しようとしたとき、プログラムは分割して答えを出力します。私は検索しましたが、助けを見つけることができませんでした! 100000000または199999999より小さい数字の場合、コーディングが問題なく機能します。高い値が与えられたときにプログラムがクラッシュする

Scanner in = new Scanner(System.in); 
double n1 = in.nextInt(); 
double n2 = in.nextInt(); 
double n3 = n1/n2; 
System.out.println(n3); 
+0

「int」の代わりに「double」を使用しますか? Javaのintは32ビットで、上限は約20億です。 –

+0

プログラムがクラッシュしますか?それはどういう意味ですか、出力やエラーはありませんでしたか? –

+1

[スキャナの長整数型の例外、スレッド "main" java.util.InputMismatchExceptionの例外(https://stackoverflow.com/questions/19698025/scanner-for-long-integer-exception-in-thread-main) -java-util-inputmismatchexce) – Tom

答えて

1

使用

in.nextDouble(); 

または

in.nextLong(); 
2

あなたは値未満2^31 -1が(もちろんそれがdoubleに変換される)整数を読み込みますin.nextInt()を使用しています。しかし、(2^31) - 1より多くの値を12589691475に与えると、nextInt()は非常に大きな数値なので、それらを読み取ることができません。

代わりにin.nextDouble()を使用してください。

+0

私はOPにとって重要かどうか分かりませんが、二重除算は整数除算とは異なる動作をします。もしそれが最初の選択肢かもしれない 'long'に収まるならば。 –

0

任意の大きい数値については、java.math.BigIntegerまたはjava.math.BigDecimalを使用してください。

Scanner in = new Scanner(System.in); 
BigInteger n1 = new BigInteger(in.nextLine()); 
BigInteger n2 = new BigInteger(in.nextLine()); 
BigInteger n3 = n1.divide(n2); 
System.out.println(n3); 
関連する問題