java.lang.NumberFormatException:无效的int:" 3546504756",这个错误是什么意思?

时间:2014-12-06 11:47:09

标签: java android numberformatexception parseint

我正在创建一个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"

我想知道这意味着什么,以及我如何解决它。

4 个答案:

答案 0 :(得分:8)

错误只是意味着java无法将您尝试在调用Integer.pasrseInt时使用的String转换为该数字超出整数范围。

您应该使用Long.parseLong,因为3546504756号码超出整数range

确保您的BridgeData构造函数接受long作为参数而不是整数。

答案 1 :(得分:1)

修改数据类型及其大小的概念可能对您有所帮助

http://www.tutorialspoint.com/java/java_basic_datatypes.htm

答案 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

的更多信息