2014-10-01 88 views
0

我正在試圖製作一個將二進制數字轉換爲基本10數字的int方法。我認爲我的循環結構正確,但我無法弄清楚如何將索引位置與指數聯繫起來。基本上,如果字符串中有一個'1',我想將它返回爲2,無論該字符的索引位置是多少。此外,這將需要我逆指數(以便0位置是字符串中最右邊的字符以下是我迄今爲止:!如何將指數定義爲字符串的索引位置

public static int BinaryToNumber(String numberInput) 
{ 
    int len = numberInput.length(); 

    for(int i=len-1; i<len; i--) 
    { 
     if(i == '1'); 
     { 
      return n; 
     } 
    } 
    return 0; 
} 

預先感謝您

+0

的''<<閱讀操作起來。或者將n初始化爲1,並在循環中每次乘以2。 – keshlam 2014-10-01 01:11:09

+1

爲什麼不是['Integer.parseInt(numberInput,2);'](http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#parseInt%28java.lang.String ,%20int 29%)? – 2014-10-01 01:14:43

回答

0

我會如果在可能的情況下更喜歡Java內置例程 - 正如我在我的評論Integer.parseInt(numberInput, 2);中所說的那樣。按照慣例,Java方法名稱以小寫字母開頭。最後,您可以修復代碼(並添加了一個小測試工具) ,

public static int binaryToNumber(String numberInput) { 
    if (numberInput == null) { 
     return 0; 
    } 
    int ret = 0; 
    char[] ni = numberInput.trim().toCharArray(); 
    for (int i = 0; i < ni.length; i++) { 
     if (ni[i] == '1') { 
      // This is 2^(n) where (n) is based on the position from the right. 
      ret += 1 << ni.length - i - 1; 
     } 
    } 
    return ret; 
} 

public static void main(String[] args) { 
    for (int i = 0; i < 10; i++) { 
     String t = Integer.toBinaryString(i); 
     System.out.printf("%s = %d%n", t, binaryToNumber(t)); 
    } 
} 
0

這是我的實現對於這個問題

public static void main(String[] args) { 
    String str = "100101"; 
    System.out.println(toDecimal(str)); 
} 

private static int toDecimal(String binary) { 
    int result = 0; 
    for(int i = 0; i < binary.length(); i++) { 
     int a = (int) binary.charAt(i) - 48; 
     double secondPart = 1 << (binary.length()-1) - i; 
     result += a * secondPart; 
    } 

    return result; 
} 

我希望幫助
薩拉姆

相關問題