java.lang.NumberFormatException:对于输入字符串:“9646324351”

java.lang.NumberFormatException: For input string: "9646324351"

public int reverse(int x) {
    String xString=String.valueOf(Math.abs(x));
    StringBuffer reverseX=new StringBuffer (xString);

    if (x>=Integer.MIN_VALUE & x<=Integer.MAX_VALUE) {
        reverseX=reverseX.reverse();
        if (x<0) 
            reverseX=reverseX.insert(0,"-");

        return Integer.parseInt(reverseX.toString());
    }
    else 
        return 0;
}

运行时错误消息:

Line 12: java.lang.NumberFormatException: For input string: "9646324351"

最后执行的输入:

1534236469

怎么了?请帮助 Orz!!!

该数字太大,无法解析为整数,它超过了 Integer.MAX_VALUE

宁愿使用Long.parseLong

使用双整数 class 而不是整数 阅读文档 https://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html

如果您尝试使用以下值调用您的方法:

reverse(9646324351);

您遇到编译器错误,导致您遇到问题:

The literal 9646324351 of type int is out of range

所以我不明白为什么你的方法会出错。

在您的程序中使用 long/Long 或 BigInterger

Here 您可以了解数据类型及其涵盖的范围

public long reverse(int x) {
    String xString=String.valueOf(Math.abs(x));
    StringBuffer reverseX=new StringBuffer (xString);

    if (x>=Integer.MIN_VALUE & x<=Integer.MAX_VALUE) {
        reverseX=reverseX.reverse();
        if (x<0) 
            reverseX=reverseX.insert(0,"-");

        return Long.parseLong(reverseX.toString());
    }
    else 
        return 0L;
}

你可以试试上面的代码。

因为这个 9646324351 值超出了 int 的范围 type.You 需要为这个字符串到数字的转换提供更大的数据类型。 据我们所知

double's range > long's range >int's range

你也可以试试BigInteger

希望对您有所帮助。