2013-08-28 185 views
-2

我在这里的一个java程序中有一个方法,在一个简单的乘法上给出错误的结果,我不知道发生了什么。也许这是eclipse中的一个设置,我需要扩展 - 我只是不知道。Java给出了错误的结果

简单为:987,654,321 * 10.显然应该是9,876,543,210。相反,我得到了1,286,608,618。世界上有什么?该方法只是读取字符并将标记号码(不超过10位数字)添加到列表中。其他一切正常,但它出于某种原因讨厌这个数字。

public void number(char dig, boolean lc){ 
    int num = Character.getNumericValue(dig); 
    if(number == 0){ 
     number = num; 
    } 
    else{   
     number = number*10 + num; 
    } 
    if(lc){ 
     if(String.valueOf(number).trim().length() <= intLength){ 
      tokenList.add(number); 
      number = 0; 
      return; 
     } 
     else{ 
     System.out.println("Error in number entry. Invalid or exceeded length: " + number); 
      number = 0; 
      return; 
      } 
    } 
} 
+0

凡号来自哪里?此外,你应该避免命名该功能“数字” –

+1

什么是2提高到31功率? –

+0

“溢出”。 http://en.wikipedia.org/wiki/Arithmetic_overflow –

回答

7

您的值远远超出整数的范围。下面的语句:

System.out.println(9_876_543_210L); // This is what you are claiming should have come 
System.out.println(Integer.MAX_VALUE); 

打印:


2147483647 

所以,当你做987654321 * 10,该值可能不适合的int,因此溢出,你得到这一结果。

替代方案?使用long类型。


参见:

+0

这解决了它。我从来没有想到过。只要最少10分钟用完,就会接受你的答案。 – user1814946