java.lang.NumberFormatException:无效的int:“3546504756”,这个错误是什么意思?
我正在创建一个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"
我不知道这意味着什么,我怎么能解决这个问题。
错误只是意味着Java不能说你想在你的电话使用字符串转换为Integer.pasrseInt
作为数字超出整数的范围。
您应该使用Long.parseLong
作为3546504756号码是不是整数的range。
确保发布您的BridgeData构造函数接受long作为参数而不是整数。
谢谢!如上所述,这肯定是非常基本的东西,我经常会忘记或错过,而且编程只是我的爱好,所以我每天都在学习新的东西;) – 2014-12-06 12:01:40
对不起,但我该如何解决这个问题? :) – 2014-12-06 12:10:09
在Java中,int
是32位,这足以存储高达20亿以上的数字。您试图阅读的电话号码是无效的int
,因为它太大了。
如果你的坐标值超过十亿,我会严肃地质疑你所做的任何设计。但是,如果您确实需要如此大的数字,请在您的BridgeData
类中使用long
代替int
,在您引用的代码中使用Long.parseLong
代替Integer.parseInt
。
int值的范围可以是-2,147,483,648之间的谎言2,147,483,647并您提供更比这就是为什么它给NumberFormatException的
你得值存储在无论是长或其他更为范围premetive类型。
可以找到更多关于Java premetive数据类型范围和值here
3546504756是作为出来整数的值或范围。改为使用长。 – 2014-12-06 11:48:00
使用'long'而不是'int' – 2014-12-06 11:49:24
@DavidWallace我正在创建另一家公司的应用程序的移动版本,并且我正在与他们的支持人员/开发人员进行电子邮件对话,他们说他们会写一个“文档”或解释坐标系是如何建立起来的,然后发给我,所以我在等待的时候创建了基础,比如文件阅读等。 这可能是非常基本的东西,但我很年轻,编程只是我的爱好,但;) – 2014-12-06 11:56:23