我只是想创建一个方法,可以将数字从二进制系统(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;)。 如果可能的话,你能否就此提出一些建议。
答案 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)
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;
}