2017-06-16 75 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我更新了我的答案 –

相關問題