2014-03-26 115 views
1

我無法將二進制轉換爲十進制。我們必須使用一個函數進行轉換並手動完成,而不是使用預定義的函數。這是我到目前爲止,我知道這是一團糟,但我堅持如何解決它。謝謝!java二進制到十進制

import java.util.Scanner; 

public class BinaryConversion { 

public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 

    String inString; 
    int decimal; 

    System.out.println("Enter a binary number: "); 
    inString = input.nextLine(); 

    while (!"-1".equals(inString)) { 
     int i; 
     int binaryLength; 

     binaryLength = inString.length(); 
public static int binaryToDecimal (String binaryString) { 

    for (i = binaryLength - 1, decimal = 0; i >= 0; i--) { 
     if (inString.charAt(i) == '1') 
      decimal = decimal + Math.pow(2,inString.length() - 1 - i); 
    } 
    return (int) decimal; 
} 
     System.out.println(decimal); 

     System.out.println("Enter a binary number: "); 
     inString = input.nextLine(); 
    } 
    System.out.println("All set !"); 
} 
} 
+0

告訴我們什麼是錯的 – weston

+0

你似乎裏面有另外一個功能是一個開始。即公共靜態INT binaryToDecimal不能在主內部定義 – weston

回答

2

要使用的功能,爲你的作業要求,您必須編寫功能的主要方法,然後包括聲明調用功能。因此,移動這個上述,說public static void main行:

public static int binaryToDecimal (String binaryString) { 

    for (i = binaryLength - 1, decimal = 0; i >= 0; i--) { 
     if (inString.charAt(i) == '1') 
      decimal = decimal + Math.pow(2,inString.length() - 1 - i); 
    } 
    return (int) decimal; 
} 

而且,每個函數或方法(包括main)具有它使用它自己的變量,稱爲當地變量;但每個函數使用的局部變量是它自己的單獨副本。因此,上述功能將不能使用屬於mainbinaryLengthdecimal變量。你需要聲明它們裏面binaryToDecimal

public static int binaryToDecimal (String binaryString) { 

    int decimal; 
    int binaryLength; 
    for (i = binaryLength - 1, decimal = 0; i >= 0; i--) { 
     if (inString.charAt(i) == '1') 
      decimal = decimal + Math.pow(2,inString.length() - 1 - i); 
    } 
    return (int) decimal; 
} 

此外,此功能將無法訪問maininString,但這個想法是,你給的功能,你想工作的字符串與,它被稱爲binaryString。所以在功能改變inStringbinaryString

public static int binaryToDecimal (String binaryString) { 

    int decimal; 
    int binaryLength; 
    for (i = binaryLength - 1, decimal = 0; i >= 0; i--) { 
     if (binaryString.charAt(i) == '1') 
      decimal = decimal + Math.pow(2,binaryString.length() - 1 - i); 
    } 
    return (int) decimal; 
} 

而且也注意到binaryLengthdecimal變量在main完全無關的同名變量。這意味着當您在main中分配binaryLength時,對binaryToDecimal中的binaryLength沒有影響。你需要在函數中分配它。更改int binaryLength;

int binaryLength = binaryString.length(); 

最後,爲了使用該功能,main需要調用它。將這個在main功能:

decimal = binaryToDecimal(inString); 

main執行,它會調用該函數並告訴它與inString工作。但該函數將調用binaryString。該函數將返回結果,然後main將會將該結果分配給變量decimal - 這意味着屬於main的局部變量decimal,因爲上述語句在main之內。

我不知道這是否會讓你的整個程序工作。 (它應該,但我不確定。)但我只是想解釋如何使用函數的細節。

+0

謝謝你這麼徹底的解釋!我是編程新手,對於數組和方法是如何工作的,我還不清楚。 – user3462077

0

當我清理你的代碼,它的工作就好了 -

public static int binaryToDecimal(String binaryString) { 
    int binaryLength = binaryString.length(); 
    int decimal = 0; 
    for (int i = binaryLength - 1; i >= 0; i--) { 
     if (binaryString.charAt(i) == '1') { 
      decimal += Math.pow(2, binaryLength - 1 - i); 
     } 
    } 
    return decimal; 
} 

public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    System.out.println("Enter a binary number: "); 
    String inString = input.nextLine(); 

    while (!"-1".equals(inString)) { 
     System.out.println(binaryToDecimal(inString)); 

     System.out.println("Enter a binary number: "); 
     inString = input.nextLine(); 
    } 
    System.out.println("All set !"); 
} 

輸出

Enter a binary number: 
01 
1 
Enter a binary number: 
10 
2 
Enter a binary number: 
-1 
All set ! 
0

這裏的功能後,一點點清理。

 public static int binaryToDecimal (String binaryString) { 
      int decimal = 0; 
      int base = 2; 
      for (int i = binaryString.length() - 1; i >= 0; i--) { 
       if (binaryString.charAt(i) == '1') 
        decimal += Math.pow(base,i); 
      } 
      return decimal; 
     } 
1

混亂的部分是與Math.pow,其複雜的參數,其中,關斷接一個錯誤容易。

然而,如果我們有許多在基部10中,像

它的值是

(((0×10)+1)* 10 + 2)×10 + 3

這看起來很複雜,但請注意簡單模式:從0開始,我們會遍歷數字。只要我們有另一個dgit,我們將以前的結果乘以基數並添加數字值。就這樣!沒有Math.pow,沒有複雜的索引計算。

因此:

String s = "1010"; 
int value = 0; 
int base = 2; 
for (i=0; i < s.length(); s++) { 
    char c = s.charAt(i); 
    value = value * base; 
    value = value + c - '0'; 
}