2013-09-26 2 views
1

이상한 숫자 형식 예외가 발생합니다. 새로운 Integer 래퍼 객체를 만들려고 할 때 이상한 문자가 있으면 작동하지 않지만 입력 문자열이 일반적인 숫자 문자열 인 것 같습니다. 이 오류가 발생하는 다른 이유가 있습니까?숫자 스트링의 Stramge 오류 : NumberFormatException

systemtest: 
    [junit] Running simpledb.systemtest.ScanTest 
    [junit] Testsuite: simpledb.systemtest.ScanTest 
    [junit] Tests run: 3, Failures: 0, Errors: 3, Time elapsed: 0.097 sec 
    [junit] Tests run: 3, Failures: 0, Errors: 3, Time elapsed: 0.097 sec 
    [junit] 
    [junit] Testcase: testSmall took 0.025 sec 
    [junit]  Caused an ERROR 
    [junit] For input string: "4386131530" 
    [junit] java.lang.NumberFormatException: For input string: "4386131530" 
    [junit]  at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
    [junit]  at java.lang.Integer.parseInt(Integer.java:484) 
    [junit]  at java.lang.Integer.parseInt(Integer.java:514) 
    [junit]  at simpledb.HeapPageId.hashCode(HeapPageId.java:44) 

... 

[junit] Testcase: testCache took 0.029 sec 
    [junit]  Caused an ERROR 
    [junit] For input string: "8140111260" 
    [junit] java.lang.NumberFormatException: For input string: "8140111260" 
    [junit]  at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
    [junit]  at java.lang.Integer.parseInt(Integer.java:484) 
    [junit]  at java.lang.Integer.parseInt(Integer.java:514) 
    [junit]  at simpledb.HeapPageId.hashCode(HeapPageId.java:44) 
    [junit]  at simpledb.BufferPool.getPage(BufferPool.java:70) 
    [junit]  at simpledb.HeapFile$HFTupleIterator.retrieveTuples(HeapFile.java:200) 
    [junit]  at simpledb.HeapFile$HFTupleIterator.open(HeapFile.java:141) 
    [junit]  at simpledb.SeqScan.open(SeqScan.java:92) 
    [junit]  at simpledb.systemtest.SystemTestUtil.matchTuples(SystemTestUtil.java:121) 
    [junit]  at simpledb.systemtest.SystemTestUtil.matchTuples(SystemTestUtil.java:107) 
    [junit]  at simpledb.systemtest.SystemTestUtil.matchTuples(SystemTestUtil.java:100) 
    [junit]  at simpledb.systemtest.ScanTest.testCache(ScanTest.java:99) 
    [junit] 

답변

3

숫자가 너무 커서 정수 변수에 맞지 않습니다. 그러나이 크기의 정수는 long에 맞습니다. 선언을 long (또는 가능하면 BigDecimal)으로 변경하거나 더 작은 숫자 < = Integer.MAX_VALUE을 사용하십시오.