Страницы

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

воскресенье, 2 июня 2019 г.

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

Что за 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)


Ответ

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

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

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