2013-02-09 55 views
-1

我幾乎完成了一個代碼,該代碼允許用戶將二進制數字輸入二進制,然後將二進制數字反轉並轉換回十進制。在Java中將二進制轉換爲十進制

我解決了一切,除了二進制到小數部分。無論我輸入什麼,它都會一遍又一遍地給我一樣的數字。我不明白爲什麼。基本上,爲什麼我的代碼的最後一部分是錯誤的?我根據你do-while循環狀態時遇到問題,尋找陣列/串的長度,然後將其交由2^N等乘...

回答

0

此代碼有兩個問題。

1)您沒有存儲小數到二進制轉換的結果。你應該引入新的String變量來存儲具有相反二進制值的字符串。

2)您的二進制到十進制算法不正確。 s.charAt(i)返回char值,但您需要雙倍值才能在計算中使用它。 Math.pow(2,(s.length() - i - 1))也是不正確的 - 據我所知它是用於非反轉二進制值。

的代碼固定的版本應該是這樣的:

public static void main(String[] args) { 
    int a[] = {0, 1}; 

    int number; 
    int remainder; 
    String binary = ""; 

    Scanner in = new Scanner(System.in); 

    System.out.print("Enter Decimal Number: "); 
    number = Integer.parseInt(in.next()); 

    System.out.print("Binary Number in Reverse: "); 
    do { 
     remainder=number%2; 
     if(remainder > 0){ 
      binary += a[1]; 
      //System.out.print(a[1]); 
     } 
     else{ 
      binary += a[0]; 
      //System.out.print(a[0]); 
     } 
     number=number/2; 
    } while(number>0); 

    System.out.print(binary); 

    System.out.print(" \nDecimal number: "); 
    //String s = Integer.toString(number); 
    double result = 0; 
    for (int i = 0; i < binary.length(); i++) 
     result = result + Double.parseDouble(binary.substring(i, i + 1)) * Math.pow(2, i); 
    System.out.print(result); 
} 
+0

謝謝。其實,我想要反向二進制小數輸出,但我可以自己做。非常感謝!! – Euridice01 2013-02-09 22:28:37

0

number永遠是零或更低:​​

這會導致變量s(請選擇更好的變量名稱...)始終爲「0」。

我想你可以找出其餘的。

+0

你能給我一個更大的暗示?我仍然困惑?即使我刪除了do-while,它仍然是相同的錯誤 – Euridice01 2013-02-09 19:26:56

+0

@ Euridice01你說:'無論我輸入什麼,它都會一次又一次地給我一樣的數字.'你的變量's'將始終等於「 0" 。這就是爲什麼你每次都得到相同的價值。請自己進行一些基本的調試,看看您是否可以使程序按預期工作。 – 2013-02-09 20:11:31

+0

對不起。我已經過了2個多小時,我仍然感到困惑。 do-while中的數字總是大於0?那有什麼問題? S爲什麼是零? – Euridice01 2013-02-09 20:32:43

相關問題