2012-10-10 260 views
0

我是一個嘗試編寫將輸入的二進制數轉換爲十進制數的程序的新手程序員。據我所知,數學和代碼是正確的,沒有編譯錯誤返回,但輸出的數字不是正確的十進制數。我的代碼如下:二進制到十進制轉換

String num; 
    double result = 0; 
    do { 
    Scanner in = new Scanner(System.in); 
    System.out.println("Please enter a binary number or enter 'quit' to quit: "); 
    num = in.nextLine(); 
    int l = num.length(); 
    if (num.indexOf("0")==-1 || num.indexOf("1")==-1){ 
    System.out.println("You did not enter a binary number."); 
    } 

    for (int i = 0; i < l; i++) 
{ 
    result = result + (num.charAt(i) * Math.pow(2, (l - i))); 
} 
System.out.println("The resulting decimal number is: " +result); 
    } while (!num.equals("quit")); 


    if (num.equals("quit")){ 
    System.out.println("You chose to exit the program."); 
    return; 
    } 

任何幫助,你可以給予將不勝感激。我試着儘可能清楚地表明自己的問題,但如果您有任何問題,我會盡力回答最好的問題。我沒有這麼長時間。我所需要的只是讓某人查看它並希望找到我在某處發生的錯誤,謝謝。

+1

如果這不是一種編程練習,您可以用2 – dnault

回答

2

變化

result = result + (num.charAt(i) * Math.pow(2, (l - i))); 

result = result + ((num.charAt(i) - '0') * Math.pow(2, i)); 

或更緊湊,

result += (num.charAt(i) - '0') * Math.pow(2, i); 

記住字符'0'是不一樣的東西數量0(與'1'1相同); num.charAt(i)返回字符不是整數。


int a = '0'; 
int b = 0; 
System.out.println(Math.pow(2, a)); 
System.out.println(Math.pow(2, b)); 

輸出:

2.81474976710656E14
1.0

很大的區別,不是嗎?

+1

基數其實,這是一個不錯的主意,「轉換」的字符使用的Long.parseLong(一個String,詮釋基數)「0」到數字... –

1

函數String.charAt();不會返回數字0或1,您可以將該數字與字符「id」相乘。您需要將字符串/字符轉換爲數字。

String num; 
    double result = 0; 
    do { 
    Scanner in = new Scanner(System.in); 
    System.out.println("Please enter a binary number or enter 'quit' to quit: "); 
    num = in.nextLine(); 
    int l = num.length(); 
    if (num.indexOf("0")==-1 || num.indexOf("1")==-1){ 
    System.out.println("You did not enter a binary number."); 
    } 

    for (int i = 0; i < l; i++) 
{ 
    result = result + (Integer.parseInt(num.substring(i,i+1)) * Math.pow(2, (l - i))); 
} 
System.out.println("The resulting decimal number is: " +result); 
    } while (!num.equals("quit")); 


    if (num.equals("quit")){ 
    System.out.println("You chose to exit the program."); 
    return; 
    } 

順便說一句:爲什麼字符串不包含0或1不是二進制數字?例如,請考慮1111。我想你應該更好地檢查「既不是0也不是1」

if (num.indexOf("0")==-1 && num.indexOf("1")==-1){ 
    System.out.println("You did not enter a binary number."); 
    } 
0

注意num.charAt(i)給出了字符的ASCII碼爲i位置。這不是你想要的價值。在對數值進行任何運算之前,您需要將每個字符數字轉換爲int

0

Integer.parseInt(string, base)使用「base」基數將字符串解析爲整數,如果無法轉換,則會引發異常。

import java.util.Scanner; 

public class Convertion { 

    public static void main(String[] args) { 
     String num; 
     Scanner in = new Scanner(System.in); 
     System.out.println("Please enter a binary number"); 
     num = in.nextLine(); 
     try{ 
       //this does the conversion 
       System.out.println(Integer.parseInt(num, 2)); 
     } catch (NumberFormatException e){ 
       System.out.println("Number entered is not binary"); 
     } 
    } 
}