我的方法有什么问题?

时间:2015-11-10 18:04:01

标签: java

我只是想创建一个方法,可以将数字从二进制系统(base2)转换为十进制系统(base10)。但我想出了一些问题。我不知道如何纠正它。这是我的方法

public static int toDecimal (String base2) 
   {
     int sum=0;

     for ( int k=base2.length(); int i=0; k>0, i<=base2.length()-1; k--, i++)
     {
       char symbol = base2.charAt(k);
       sum= sum+ symbol*i;
     }
     return sum;
   }

P.S:我无法将字符转换为整数类型(sum + symbol * i;)。 如果可能的话,你能否就此提出一些建议。

4 个答案:

答案 0 :(得分:1)

实际上你的代码因为不正确的for循环语法而无法工作 - 你可以使用;符号在括号内只有两次。 sum = sum + symbol * i;也不是正确的转换公式。

似乎此代码可以解决您的问题

public static int toDecimal(String base2) {
    int sum=0;
    int i = 0;
    for (int k = base2.length() - 1; k >= 0; k--) {
        sum += Integer.parseInt(String.valueOf(base2.charAt(k))) << i;
        i++;
    }
    return sum;
}

我希望这对你有帮助!

答案 1 :(得分:1)

只需对您的for循环进行一些小修改就可以使代码正常工作

public static int toDecimal(String base2) {
    int sum = 0;    
    for (int k = base2.length() - 1, i = 0; k>=0; k--, i++) {
        int symbol = (int)base2.charAt(k)-48;//0 is 48; 1 is 49 in ASCII
        sum = (int) (sum + (int) symbol * Math.pow(2, i));
    }
    return sum;
}

你去吧

答案 2 :(得分:0)

在for循环中,您初始化2个变量。在他们之间你有一个; (分号)但应该有一个,(逗号)。

答案 3 :(得分:0)

为了消除对parseInt调用的需要,并从字符串的开头开始,你可以使用

   public static int toDecimal( String str) {
      int val = 0;
      for (int i = 0; i < str.length(); i++) {
         val = (val<<1) + ((str.charAt( i ) == '0') ? 0 : 1);
      }
      return val;
   }