Страницы

Поиск по вопросам

пятница, 13 марта 2020 г.

NumberFormatException при вызове Integer.parseInt() не во всех случаях и при непустой валидной строке

#java #android #biginteger


Что за Exception выкидывает? 
Вот участок кода на который ругается.

  55  StringBuilder quotientStr = new StringBuilder();

  56  quotientStr.append(arrOfVar[2]);**//добавляем число из массива**
  57  quotientStr.append(5);
  58  int quotient = Integer.parseInt(quotientStr.toString());

Exception in thread "main" java.lang.NumberFormatException: For input string: "4090303030"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:495)
    at java.lang.Integer.parseInt(Integer.java:527)
    at TaskTwo.division.LongDivision.intermCalc(LongDivision.java:58)

    


Ответы

Ответ 1



Проблема в том, что вы вышли за границы максимальнно возможного значения содержимого переменной типа int, кое равняется 2147483647, т.е. 2млрд+. А у вас 4млрд+. Таким образом, например, вы не можете поместить всё население нашей планеты в переменную int. А вот население Китая вполне поместится в такой переменной. И программа такая будет работать исправно ровно до тех пор, пока Китай не присоединит к себе Индию. Только представьте: вы играете в к-л игру за Китай, развязываете n-мировую войну, побеждаете и присоединяете к себе Индию... А вместо сообщения "Поздравляем, теперь коммунистов в мире 2млрд+!" ваша игра вылетает на рабочий стол! Ибо в такой игре захватить Индию невозможно безнаказанно) Решение: Для таких больших чисел надо использовать класс BigInteger, передавая вашу строку в его конструктор: BigInteger quotient = new BigInteger(quotientStr.toString()); System.out.println(quotient); //в вашем случае без проблем выведет 4090303030

Комментариев нет:

Отправить комментарий