我正在创建一个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
是通过在每个;
上拆分当前行而创建的String数组。
“主要”错误是:
java.lang.NumberFormatException: Invalid int: "3546504756"
我想知道这意味着什么,以及我如何解决它。
答案 0 :(得分:8)
错误只是意味着java无法将您尝试在调用Integer.pasrseInt
时使用的String转换为该数字超出整数范围。
您应该使用Long.parseLong
,因为3546504756号码超出整数range。
确保您的BridgeData构造函数接受long作为参数而不是整数。
答案 1 :(得分:1)
修改数据类型及其大小的概念可能对您有所帮助
答案 2 :(得分:0)
在Java中,int
是32位,足以存储数量超过20亿的数据。您尝试阅读的数字无效int
,因为它太大了。
如果您的坐标值超过十亿,我会严重质疑您正在做的任何设计。但是,如果您真的需要这么大的数字,请在long
课程中使用int
代替BridgeData
,并在代码中使用Long.parseLong
代替Integer.parseInt
你引用了。
答案 3 :(得分:0)
int值的范围可以介于-2,147,483,648到2,147,483,647之间,并且你提供的数据超出了它给出numberformatexception的原因
您必须将值存储在long或其他更多范围的premetive类型中。
您可以找到有关java premetive数据类型范围和值here
的更多信息