2013-11-24 7 views
-3

이것은 내 프로그램입니다. 나는이 오류를 고칠 수 없으므로 0으로 나누는 곳을 모른다.스레드 "main"예외를 해결할 수 없습니다. java.lang.ArithmeticException :/by zero> 오류

Exception in thread "main" java.lang.ArithmeticException:/by zero 

이 프로그램은 숫자의 자릿수를 뒤집어서 표시합니다. 예. 57823 -> 32875 나는 그 일을 할 수 없다.

import acm.program.*; 
public class ReverseDigits extends Program { 
public void run(){ 
println("This program reverses the digits in an integer."); 
int n = readInt("Enter a positive integer: "); 
int x = 10; 
int t = 1; 
double total = 0; 
//Finds the number of digits 
while (n > 0){ 
    while (n % x != 0) { 
     t = t + 1; 
     x = x * 10; 
} 
} 
//In case the number has one digit the new number is the same 
if(t == 1) { 
total = n; 
} 
//Creating the new number 
while (t > 1) { 
     t=t-1; 
     total = (total + (((n/(Math.pow(10, t))) - ((n/(Math.pow(10, (t+1)))) * 10)) * 10)); 
    } 
    println("The reverse number is " + total); 
    } 
} 
+4

예외 스택 추적을 본 적이 있습니까? 그것은 어떤 코드 행이 예외를 일으키는 지 정확히 알려줍니다! http://stackoverflow.com/questions/3988788/what-is-a-stack-trace-and-how-can-i-use-it-to-debug-my-application-errors – isnot2bad

+1

및이 코드를 참조하십시오. 숫자를 뒤집을 때와 아무런 관련이 없습니다. 이렇게하려면 for 및 temp 문자열 만 필요합니다. 그것은 단지 3 줄의 코드처럼 될 것입니다. –

+0

while 루프 논리를 다시 정렬하십시오. – Masudul

답변

2

스택 추적은 그런 일이 줄 번호이 오류가 쉽게 찾을 수 당신에게 말할 것입니다 경우에도 마찬가지입니다. 원칙적으로 나누는 곳은 3 번뿐입니다. 희망 결코 0

이다 그러나 0이 아닌 무언가의 힘으로 그들의 두, 괜찮 니에 x 변수 완전히 잘못 프로그램 루프는 다음과 같은 값을 취할 것입니다 반면 :

[10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000, 1410065408, 
1215752192, -727379968, 1316134912, 276447232, -1530494976, 1874919424, 1569325056, 
-1486618624, -1981284352, 1661992960, -559939584, -1304428544, -159383552, -1593835520, 
1241513984, -469762048, -402653184, 268435456, -1610612736, 1073741824, -2147483648, 
0] 

을 따라서 0을 두 번째 인수 인 %으로 사용하면 예외가 발생합니다. 시도해보십시오.

실제로 이런 일이 발생하지 않으면 잠시 동안 변경되지 않는 n의 값에 따라 무한 루프가 발생합니다.

+0

줄 번호가없는 좋은 캐치입니다. OP, 이것은 고전적인 산술 오버플로입니다 : https://en.wikipedia.org/wiki/Arithmetic_overflow – Radiodef