2017-09-12 10 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'을 사용하십시오. 자바의 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);