2013-12-20 51 views
1

我編寫了一個程序,將數字從Binary轉換爲Decimal,並且如果輸入是0011,它會給出錯誤的輸出。對於0011,答案應該是3,但給出9,否則其他輸入正確。程序Binary to Decimal在Java代碼中給出錯誤

代碼:

public class BinaryToDecimal { 
static int testcase1=1001; 
public static void main(String[] args) { 
    BinaryToDecimal test = new BinaryToDecimal(); 
    int result = test.convertBinaryToDecimal(testcase1); 
    System.out.println(result); 
} 
//write your code here 
public int convertBinaryToDecimal(int binary) { 
    int powerOfTwo=1,decimal=0; 
    while(binary>0) 
    { 
     decimal+=(binary%10)*powerOfTwo; 
     binary/=10; 
     powerOfTwo*=2; 
    } 
    return decimal; 
} 
} 

回答

1

有這樣的字符串開始:

public static void main(String[] args) throws IOException 
{ 
    boolean correctInput = true; 
    BufferedReader m_bufRead = new BufferedReader(new InputStreamReader(System.in)); 
    System.out.println("Bitte geben sie eine Dualzahl ein:"); 
    String input = m_bufRead.readLine().trim(); 
    for(int i = 0; i < input.length(); i++) { 
     if(input.charAt(i)!='0' && input.charAt(i)!='1') { 
      correctInput = false; 
     } 
    } 
    if(correctInput) { 
     long dezimal = 0; 
     for(int i = 0; i < input.length(); i++) { 
      dezimal += Character.getNumericValue(input.charAt(i)) * Math.pow(2, input.length()-(i+1)); 
     } 
     System.out.println("\nDezimalwert:\n" + dezimal); 
    } 
    else { 
     System.out.println("Ihre Eingabe kann nicht umgewandelt werden"); 
    } 
} 
5

與一個0開始字面的整數被認爲是一個八進制,即。底座8

0011 

(0 * 8^3) + (0 * 8^2) + (1 * 8^1) + (1 * 8^0) 

其等於9.

0111 

將是

(0 * 8^3) + (1 * 8^2) + (1 * 8^1) + (1 * 8^0) 

等於73.

您正在尋找0b0011,它是二進制數的整數字面值表達式。

+0

很好的解釋,告訴他哪兒出了問題。 – Aashray

0

試試吧

public class Binary2Decimal 
{ 
public static void main(String arg[]) 
{ 
    int sum=0,len,e, d, c; 
    int a[]=new int[arg.length]; 

    for(int i=0; i<=(arg.length-1); i++) 
    { 
     a[i]=Integer.parseInt(arg[i]);  // Enter every digits i.e 0 or 1, with space 
    } 
    len=a.length; 
    d=len; 
    for(int j=0; j<d; j++) 
    { 
     len--; 
     e=pow(2,len); 
     System.out.println(e); 
     c=a[j]*e; 
     sum=sum+c; 
    } 
    System.out.println("sum is " +sum); 
} 

static int pow(int c, int d) 
{  
      int n=1; 
    for(int i=0;i<d;i++) 
    { 
     n=c*n; 
    } 
    return n; 
} 
} 
0

或者嘗試這其中也

import java.lang.*; 
import java.io.*; 

public class BinaryToDecimal{ 
public static void main(String[] args) throws IOException{ 
BufferedReader bf= new BufferedReader(new InputStreamReader(System.in)); 
    System.out.print("Enter the Binary value: "); 
    String str = bf.readLine(); 
    long num = Long.parseLong(str); 
    long rem; 
    while(num > 0){ 
    rem = num % 10; 
    num = num/10; 
    if(rem != 0 && rem != 1){ 
    System.out.println("This is not a binary number."); 
    System.out.println("Please try once again."); 
    System.exit(0); 
    } 
    } 
    int i= Integer.parseInt(str,2); 
    System.out.println("Decimal:="+ i); 
    } 
     }