2013-08-28 5 views
-2

저는 여기에 간단한 곱셈에 잘못된 결과를주는 자바 프로그램의 메소드가 있는데, 무슨 일이 일어나고 있는지 잘 모르겠습니다. 어쩌면 확장해야 할 일식의 설정 일 수도 있습니다. 나는 전혀 몰라요.자바가 잘못된 결과를 내고 있습니다.

간단함 : 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

경우 번호에서 오는? 또한, "funciton"이라는 이름을 지어서는 안됩니다. –

+1

31 번째 힘까지 2는 어땠습니까 ?? –

+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); 

인쇄 : 당신이 987654321 * 10을 수행 할 때


2147483647 

그래서, 값이 int에 맞지 않을 수 있으며, 따라서 오버 플로우, 그리고 그 결과를 얻을.

대체? long 유형을 사용하십시오.


은 참조 :

+0

이 문제가 해결되었습니다. 절대로 나에게 일어날 수 없었을 것이다. 최소 10 분이 다되면 즉시 답을 수락합니다. – user1814946

관련 문제