java.lang.NumberFormatException: Invalid int: 3546504756, что означает эта ошибка?

Я создаю приложение для Android и читаю некоторые координаты из текстового файла.

Я использую Integer.parseInt(xCoordinateStringFromFile) для преобразования координат X в целые числа, и таким же образом с координатами Y.

Когда я запускаю приложение, я получаю сообщение об ошибке в этой строке, которое выглядит так:

BridgeData data = new BridgeData(
    elements[0],
    elements[1],
    Integer.parseInt(elements[2]),
    Integer.parseInt(elements[3]),
    Integer.parseInt(elements[4]),
    new GeoPos(Integer.parseInt(elements[5].split(",")[0]), Integer.parseInt(elements[5].split(",")[1])),
    new GeoPos(Integer.parseInt(elements[6].split(",")[0]), Integer.parseInt(elements[6].split(",")[1])),
    Integer.parseInt(elements[7]),
    Integer.parseInt(elements[8])
);

Переменная elements представляет собой массив строк, созданный путем разделения текущей строки на каждые ;.

"Основная" ошибка:

java.lang.NumberFormatException: Invalid int: "3546504756"

Интересно, что это значит, и как я могу это решить.


person Daniel Kvist    schedule 06.12.2014    source источник
comment
3546504756 — это значение, выходящее за пределы диапазона для целого числа. Вместо этого используйте длинное.   -  person Alexis C.    schedule 06.12.2014
comment
используйте long вместо int   -  person atish shimpi    schedule 06.12.2014
comment
@DavidWallace Я создаю мобильную версию приложения, которое сделала другая компания, и я разговариваю по электронной почте с одним из их техподдержки/разработчиков, и они сказали, что собираются написать документацию или объяснение того, как Система координат была построена, и пришлите ее мне, так что я как бы создаю базу, например, чтение файлов и т. Д., Пока я жду. Это могут быть очень простые вещи, но я молод, и программирование пока только мое хобби;)   -  person Daniel Kvist    schedule 06.12.2014


Ответы (4)


Ошибка просто означает, что java не может преобразовать строку, которую вы пытаетесь использовать в своем вызове, в Integer.pasrseInt, поскольку это число выходит за пределы диапазона целого числа.

Вы должны использовать Long.parseLong, поскольку число 3546504756 выходит за пределы диапазона целого числа.

Убедитесь, что ваш конструктор BridgeData принимает параметр long вместо integer.

person SMA    schedule 06.12.2014
comment
Благодарю вас! Как было сказано выше, это, безусловно, очень простые вещи, которые я очень часто забываю или пропускаю, а также программирование пока только мое хобби, поэтому я каждый день узнаю что-то новое ;) - person Daniel Kvist; 06.12.2014
comment
Извините, а как закрыть вопрос? :) - person Daniel Kvist; 06.12.2014

Пересмотр концепции типа данных и их размера может помочь вам

http://www.tutorialspoint.com/java/java_basic_datatypes.htm

person Munawwar Hussain Shelia    schedule 06.12.2014

В Java int составляет 32 бита, что достаточно для хранения чисел до чуть более 2 миллиардов. Число, которое вы пытались прочитать, было недопустимым int, потому что оно было слишком большим.

Я бы серьезно усомнился в дизайне того, что вы делаете, если у вас есть координаты со значениями более миллиарда. Но если вам действительно нужны такие большие числа, используйте long вместо int в вашем классе BridgeData и Long.parseLong вместо Integer.parseInt в приведенном вами коде.

person Dawood ibn Kareem    schedule 06.12.2014

Диапазон значений int может лежать от -2 147 483 648 до 2 147 483 647, и вы предоставляете его больше, чем это, поэтому он дает исключение numberformate.

Вы должны сохранить значение либо в длинном, либо в другом предварительном типе с большим диапазоном.

Дополнительную информацию о диапазоне и значении типов данных java premetive можно найти здесь

person VikasGoyal    schedule 06.12.2014