2017-06-16 256 views
-1
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; 
} 

运行时错误消息:java.lang.NumberFormatException:对于输入字符串: “9646324351”

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

最后执行的输入:

1534236469 

有什么不对?帮助PLZ奥兹!

+0

哪一行是第12行? –

+1

请添加[mcve]。和完整的堆栈跟踪 – Jens

+2

[数字格式异常大输入]的可能重复(https://stackoverflow.com/questions/19607531/number-format-exception-for-large-inputs) –

回答

1

如果你试图调用你的方法与价值:

reverse(9646324351); 

你得到一个编译器错误,这导致你到问题:

int类型的文字9646324351超出范围

所以我不明白为什么你可以在你的方法中得到一个错误。

使用长/长或BigInterger在你的程序

Here可以RAD有关数据类型和其范围涵盖他们

+0

“_So我不明白你为什么可以在你的方法中得到一个错误_”他的输入是'1534236469',它在他的方法中颠倒过来了'9646324351',它通过'Integer.parseInt'(这是上面介绍的2^31-1范围) – KarelG

1

该数字太大而无法作为整数进行解析,它超过Integer.MAX_VALUE

而是使用Long.parseLong

+0

int的范围:-2,147,483,648到2,147,483,647, – canugivemeaname

0
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类型的范围,因此您需要为此字符串转换数值提供更大的数据类型。 我们知道

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

您也可以尝试BigInteger

希望这会帮助你。

+0

@Jens我更新了我的答案 –

相关问题