2014-12-06 2 views
2

Я создаю приложение для Android, и я читаю некоторые координаты из текстового файла.java.lang.NumberFormatException: Invalid int: "3546504756", что означает эта ошибка?

Я использую 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" 

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

+1

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

+0

использовать 'long' вместо' int' –

+0

@DavidWallace Я создаю мобильную версию приложения, которое сделала другая компания, и у меня есть разговор по электронной почте с одной из их сторонних разработчиков/разработчиков, и они сказали, что они собирался написать «документацию» или объяснить, как была создана система координат, и отправить ее мне, поэтому я вроде как создаю базу, например, чтение файлов и т. д., пока я жду. Это может быть очень простой материал, но я молод, а программирование - это только мое хобби;) –

ответ

7

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

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

Обязательно укажите, что ваш конструктор BridgeData принимает значение long вместо параметра integer.

+0

Спасибо!Как сказано выше, это, безусловно, очень простой материал, который я часто забываю или пропускаю, а также программирование - это только мое хобби, поэтому я каждый день узнаю новые вещи;) –

+0

Извините, но как мне закрыть вопрос? :) –

0

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

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

0

Диапазон Int значения может быть расположены между -2147483648 до 2147483647 и вы обеспечиваете его более, чем вот почему он дает NumberFormatException

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

Вы можете узнать больше о Java premetive диапазона типа данных и значения here

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