Исключение в потоке main java.lang.NumberFormatException: для входной строки: 3291105000

Почему это происходит? Строка, которую я разбираю, явно похожа на int. Программа читает из файла, и я знаю, что она работает больше всего, потому что этот номер далеко в конце списка. Любые идеи? Кроме того, программа анализирует целые числа, превышающие 2,2 миллиарда, поэтому я не знаю, проблема ли это в размере.


person user1451840    schedule 12.06.2012    source источник
comment
Похоже, вы уже точно знаете, в чем проблема.   -  person asawyer    schedule 12.06.2012


Ответы (4)


32-битный int со знаком может иметь размер не более 2^31 или 0x7FFFFFFFF (2 147 483 647). Вам нужно будет использовать больший тип данных. long добавит вам 2^63. Или класс BigInteger даст вам произвольный целое число.

person Jonathon Reinhart    schedule 12.06.2012
comment
К сожалению, в Java нет такой вещи, как unsigned int :( - person tskuzzy; 12.06.2012

int может иметь минимальное значение -2,147,483,648 и максимальное значение 2,147,483,647 (включительно). Ваш номер (из строки) выходит за пределы диапазона

Используйте long вместо Long.parseLong(3291105000) вам подойдет

person jmj    schedule 12.06.2012

Используйте long, который может содержать 64-битные целые числа.

  • ints может содержать только целые числа до ~ 2 миллиардов
  • longs может содержать целые числа до ~ 9e18
person tskuzzy    schedule 12.06.2012

Как говорили другие, число явно выходит за пределы диапазона int, и, следовательно, вы получаете исключение.

4 байта со знаком (дополнение до двух). -2 147 483 648 до 2 147 483 647. Как и все числовые типы, целые числа могут быть преобразованы в другие числовые типы (byte, short, long, float, double). Когда выполняются приведения с потерями (например, int в byte), преобразование выполняется по модулю длины меньшего типа.

person Kiran    schedule 12.06.2012