2016-10-11 26 views
3

1.這是我的代碼轉換二進制到十進制,但它不工作。由於某些原因,c值重複。爲什麼c值在給定的代碼中重複?

/** 
* Created by Ranjan Yadav on 11.10.2016. 
*/ 
public class BinaryToDecimal { 
    public static void main(String[] args) { 
     java.util.Scanner read = new java.util.Scanner(System.in); 
     System.out.println("Enter a binary number: "); 
     int binary = read.nextInt(); 
     int total = 0; 
     int n = 1; 
     int c = 0; 
     int number = 0; 
     while (binary != 0) { 
      c = binary % ((int) Math.pow(10, n)); 
      binary = binary/10; 
      number = c * (int)(Math.pow(2, (n - 1))); 
      total += number; 
      ++n; 
     } 
     System.out.printf("The decimal of the binary is %d", total); 
    } 
} 
+0

說我輸入1110111.第一次,'1110111%10'爲1,'binary'設置爲111011。第二次,什麼是'111011%100'? – ajb

+0

謝謝c應該只有10次被調度。 –

+1

在IDE調試器中遍歷代碼並檢查每個步驟的中間值。這應該很快顯示你的問題,你會學到一些東西。 –

回答

0

你是增大n 1除以10二進制在同一時間提出到n。由於這個原因,在第一次迭代之後,你無法獲取該單元的二進制數字。要解決這個問題,你需要在每次迭代中得到二進制模10(不是10提高到n),並且還保持二進制語句除以10.

我已簡化並對代碼做了一些小改動,增加可讀性。這裏是校正主要方法:

public static void main (String[] args){ 
    java.util.Scanner read = new java.util.Scanner(System.in); 
    System.out.println("Enter a binary number: "); 
    int binary = read.nextInt(); 
    int total = 0; 
    int n = 0; 
    int c = 0; 
    int number = 0; 
    while (binary != 0) { 
     c = binary % 10; 
     binary = binary/10; 
     number = c * (int)(Math.pow(2, n)); 
     total += number; 
     ++n; 
    } 
    System.out.println("The decimal of the binary is " + total); 
} 

的代碼工作併產生期望的結果。如果您有任何疑問,請告訴我。

0

你可以只解析與parseInt方法的整數:

java.util.Scanner read = new java.util.Scanner(System.in); 
System.out.println("Enter a binary number: "); 
String binary = read.nextLine(); 
int decimal = Integer.parseInt(binary, 2); // 2 here means the string "binary" is in binary 

如果你不能使用,試試這個算法:

  1. 創建一個變量total並使其0
  2. 使用循環遍歷二進制字符串,如下所示:for (int i = 0 ; i < binaryString.length() ; i++)
  3. 在每次迭代中,如果ch字符爲1,則添加Math.pow(2, binaryString.length() - 1 - i)。否則什麼都不要做
相關問題