2013-12-11 61 views
2

我想將二進制補碼二進制數(在任何位)轉換爲十進制,我給了一個numberformatexception.I新的在java。我努力尋找是什麼原因,但我無法找到它。有沒有人可以對我說這個代碼博客的問題是什麼?Numberformat異常

...

public static int decimal(String a){ 

     if((a.charAt(0)) == '1'){ 

     int length= a.length(); 
     String sum=""; 
     for (int i=0; i<=length; i++){ 
      int b=0; 
      char result = a.charAt(b); 
      b++; 
      if(result == 0){ 
       result=1; 
      }else{ 
       result=0; 
      } 
      sum= sum + result; 
     } 
     int num= Integer.parseInt(sum, 2); 
     num= num+1; 
     num*= -1; 
     return num; 
     }else{ 
      int decimalInt = Integer.parseInt(a, 2); 
      return decimalInt; 
     } 
    } 

...

這裏是個例外:

Exception in thread "main" java.lang.NumberFormatException: For input string: "   " 
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
    at java.lang.Integer.parseInt(Integer.java:481) 
    at BinaryToInstruction.decimal(BinaryToInstruction.java:193) 
    at BinaryToInstruction.main(BinaryToInstruction.java:83) 
+1

什麼是(BinaryToInstruction.java:193)? –

+0

也許你是在做這個學習練習,但是你知道'Integer.parseInt(String str,int radix)'?它做你正在努力完成的事情。 – jalynn2

+0

我試過這個,但是它只在二進制數是16位時才起作用。我錯了嗎 ??我嘗試了很多次,但失敗了。最後,我決定寫我自己的代碼:) – user3075117

回答

0

從堆棧跟蹤它看起來好像你逝去的只是空白。這可能是你的問題。

4

的問題是在這裏:

if(result == 0){ 
     result=1; 
}else{ 
     result=0; 
    } 

結果是char,不是int。雖然這個編譯(因爲char可以處理int值從0到65535),我想你想做的事:

if(result == '0'){ 
    result='1'; 
}else{ 
    result='0'; 
} 

請注意,您在0 初始化b環路等你」我們只會將原始字符串中的第一個char換掉,然後每次換掉它。請注意,使用StringBuilder更好。

StringBuilder sum= new StringBuilder(); 
for (int i=0; i< a.length(); i++){ 
    char result = a.charAt(i); 
    if(result == '0'){ 
     result='1'; 
    }else{ 
     result='0'; 
    } 
    sum.append(result); 
} 
int num= Integer.parseInt(sum.toString(), 2); 
+0

非常感謝你:) – user3075117

0

如果不是對大學課程的程序,你應該在

Integer.parseInt(String str, int radix) 
+0

那(int-> String)與OP試圖做的是相反的。你的意思是'Integer.parseInt(String str,int radix)'? – jalynn2

+0

當然它是parseInt。我從javadoc複製了錯誤的方法。感謝您的評論。 –

0

其實你的代碼拋出異常的其他部分使用的版本。由於正在傳遞的字符串由空格組成,因此:

if((a.charAt(0)) == '1'){ 

失敗並且其他部分參與。然而,因爲它只嘗試parseInt它會給出錯誤。

你應該首先確定爲什麼你的字符串是由白色空間構成的,而且對於這種方法,你可以使用某種保護措施,例如在字符串爲空或由空格組成的情況下,在開始時拋出異常。

將charAt(0)位與0進行比較的部分也是不正確的,正如其他成員指出的那樣。

乾杯