无法修复<exception in =“”thread =“”“main”=“”“java.lang.arithmeticexception:=”“by =”“zero =”“>错误</exception>

时间:2013-11-24 15:26:58

标签: java exception zero divide

这是我的计划。我不知道我在哪里除以零,所以我无法解决这个错误。

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

该程序应该反转任何数字的数字。 恩。 57823 - &gt; 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); 
   }  
}

1 个答案:

答案 0 :(得分:2)

即使堆栈跟踪不会告诉您行号,也很容易找到错误。 原则上,你只有3次分裂。 其中两个是好的,因为非0的东西的力量希望永远不会为0。

但完全错误编程的while循环中的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作为%的第二个参数将导致异常。 去试试吧。

顺便说一句,如果没有发生这种情况,你会有一个无限循环,因为while取决于n的值不会改变。