2014-12-06 63 views
2

我正在創建一個Android應用程序,並且正在閱讀文本文件中的一些座標。java.lang.NumberFormatException:無效的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是作爲出來整數的值或範圍。改爲使用長。 – 2014-12-06 11:48:00

+0

使用'long'而不是'int' – 2014-12-06 11:49:24

+0

@DavidWallace我正在創建另一家公司的應用程序的移動版本,並且我正在與他們的支持人員/開發人員進行電子郵件對話,他們說他們會寫一個「文檔」或解釋座標系是如何建立起來的,然後發給我,所以我在等待的時候創建了基礎,比如文件閱讀等。 這可能是非常基本的東西,但我很年輕,編程只是我的愛好,但;) – 2014-12-06 11:56:23

回答

7

錯誤只是意味着Java不能說你想在你的電話使用字符串轉換爲Integer.pasrseInt作爲數字超出整數的範圍。

您應該使用Long.parseLong作爲3546504756號碼是不是整數的range

確保發佈您的BridgeData構造函數接受long作爲參數而不是整數。

+0

謝謝!如上所述,這肯定是非常基本的東西,我經常會忘記或錯過,而且編程只是我的愛好,所以我每天都在學習新的東西;) – 2014-12-06 12:01:40

+0

對不起,但我該如何解決這個問題? :) – 2014-12-06 12:10:09

0

在Java中,int是32位,這足以存儲高達20億以上的數字。您試圖閱讀的電話號碼是無效的int,因爲它太大了。

如果你的座標值超過十億,我會嚴肅地質疑你所做的任何設計。但是,如果您確實需要如此大的數字,請在您的BridgeData類中使用long代替int,在您引用的代碼中使用Long.parseLong代替Integer.parseInt

0

int值的範圍可以是-2,147,483,648之間的謊言2,147,483,647並您提供更比這就是爲什麼它給NumberFormatException的

你得值存儲在無論是長或其他更爲範圍premetive類型。

可以找到更多關於Java premetive數據類型範圍和值here