2014-12-06 66 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