2014-01-24 5 views
0

좋습니다. 그래서 이진수 집합을 결합하는 방법을 사용하고 있습니다. 웬일인지 그것에 관해 예외를 얻고있다. 이 메서드는 numberOfBits가 4 일 때 작동하지만 최대 7로 이동할 때 오류가 발생합니다. 왜이 작업을 수행하고 있으며 지금까지 아무 것도 해결하지 않은 이유를 정확히 알 수 없습니다. 이견있는 사람? 아래 코드에 오류가 기록되어 있습니다. 어떤 도움을 주시면 감사하겠습니다.예외 오류 받기

Exception in thread "main" java.lang.NumberFormatException: For input string: "111001101100111" 
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48) 
at java.lang.Integer.parseInt(Integer.java:461) 
at java.lang.Integer.valueOf(Integer.java:554) 
at MP1.combine(MP1.java:96) 
at MP1.shiftRight(MP1.java:76) 
at MP1.main(MP1.java:131) 

public Integer combine(Register register, int numberOfBits) { 
    String C1 = Integer.toBinaryString(register.C); 
    String A1 = Integer.toBinaryString(register.A); 
    String Q1 = Integer.toBinaryString(register.Q); 

    C1 = String.format("%1s", C1).replace(' ', '0'); 
    A1 = String.format("%" + numberOfBits + "s", A1).replace(' ', '0'); 
    Q1 = String.format("%" + numberOfBits + "s", Q1).replace(' ', '0'); 

    String comboS = C1 + A1 + Q1; 

    //Says error is here (below) 
    Integer comboI = Integer.valueOf(comboS); 

    return comboI; 
} 

답변

0

정수의 최대 값은 2147483647이고, 분명히 111001101100111Integer.MAX_VALUE보다 훨씬 큽니다.

Integer.valueOf(comboS)은 결국 Integer.parseInt(str)입니다. 그것이 NumberFormatException을받은 이유입니다.

111001101100111을 10 진수가 아닌 2 진수로 구문 분석하려는 경우. Integer.parseInt(comboS, 2)이 작동합니다.

대신 상한선이없는 BigInteger을 사용하십시오.

+0

철저한 답변과 그것을 해결하는 방법 주셔서 감사합니다. 정말 감사. – cfrank12

+0

@ user3196352 여러분 환영합니다. –

0

valueOf을 얻기 전에 comboS 문자열을 인쇄하면 이상한 숫자가 표시됩니다.

정수에 맞지 않는다고 생각합니다.

+0

아 ... 그건 의미가 있습니다. 7 비트에서 15 비트 정수가 너무 큽니다. 고맙습니다. – cfrank12

+0

당신은 오신 것을 환영합니다. BTW는'replace' 코드가 필요합니까? –

+0

그래, 내가 그들을 결합하면 바이너리 코드에 대한 앞의 0이 필요합니다. 예를 들어, 2를 4 비트로 입력하고 이진 문자열로 변환하면 "10"이되지만 "0010"이 필요합니다. 형식을 지정하고 바꾸면 필요한 여분의 0이 생깁니다. – cfrank12