2014-01-24 46 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二進制而不是十進制。 Integer.parseInt(comboS, 2)將工作。

或者使用BigInteger代替,它沒有上限。

+0

感謝您的徹底解答和解決方法。對此,我真的非常感激。 – cfrank12

+0

@ user3196352不客氣。 –

0

試圖讓valueOf它,你會看到你有陌生號碼之前打印出你的連擊字符串。

我猜測它不適合整數。

+0

啊...這是有道理的。在7位時,15位整數會太大。謝謝。 – cfrank12

+0

不客氣。順便說一句,「替代」代碼是必要的? –

+0

是的,當我組合它們時,我需要前面的二進制代碼的零。例如,如果我在4位輸入2並將其轉換爲二進制字符串,我只能得到「10」,但我需要「0010」。做格式和替換給了我需要的額外的零。 – cfrank12