2014-01-24 3 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

Максимальное значение Integer - 2147483647, и, очевидно, 111001101100111 намного больше, чем Integer.MAX_VALUE.

Integer.valueOf(comboS) звонки Integer.parseInt(str) в конечном счете. Вот почему вы получили NumberFormatException.

Если вы хотите разобрать 111001101100111 в двоичном, а не десятичном виде. Integer.parseInt(comboS, 2) будет работать.

Или используйте вместо этого BigInteger, который не имеет верхнего предела.

+0

Спасибо за тщательный ответ и способ обойти его. Я очень ценю это. – cfrank12

+0

@ user3196352 Добро пожаловать. –

0

Распечатайте вашу строку Комбо, прежде чем пытаться получить valueOf его, и вы увидите странное число у вас есть.

Я предполагаю, что он не вписывается в Integer.

+0

А ... это имеет смысл. В 7 бит, 15-битное целое число было бы слишком большим. Спасибо. – cfrank12

+0

добро пожаловать. BTW - это код «replace», необходимый? –

+0

Да, мне нужны предыдущие нули для двоичных кодов, когда я их совмещаю. Например, если я ввожу 2 в 4 бита и преобразую его в двоичную строку, я получаю только «10», но мне нужно «0010». Выполнение формата и замены дает мне дополнительные нули, которые мне нужны. – cfrank12

Смежные вопросы