我的目标是从输入中获取一个包含一和零的字符串,然后使用bin2Dec方法将该二进制字符串解析为十进制数。如何正确转换?

这是我到目前为止的内容:

public class Tester {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("Enter a binary number string: ");
        String s = input.nextLine();
        System.out.println("The decimal value is " + bin2Dec(s));
    }
    public static int bin2Dec(String binaryString){
    }
}

最佳答案

实际上,执行此操作的算法非常简单。

如果您查看二进制字符串,例如“ 10110”(22),您会发现等于16 + 4 +2。加倍努力,您会发现它对应于1 * 2 ^ 4 + 0 * 2 ^ 3 +1 * 2 ^ 2 +1 * 2 ^ 1 + 0 * 2 ^ 0。看到图案了吗?对于具有值v和位置n的每个数字,对总和的“贡献”为v * 2^n

现在,实际上这个问题实际上更容易迭代(使用for循环),但是我认为这是一个家庭作业问题,因此您必须递归进行。

您需要制作另一个方法public static int bin2dec(String bin, int position)(这被称为重载方法,两个方法可以具有相同的名称,只要它们的签名不同即可)。在这种新方法中,您可以遵循上面概述的算法:


如果position等于bin.length(),则说明您已超出字符串的末尾。只需返回0。
否则,将v设置为等于position处字符的整数值(您可以使用整数解析方法,也可以仅使用if /三进制,因为只有两个选项)。
v乘以2^position(提示:Math.pow)。
返回vbin2dec(bin, position + 1)(这是实际的递归部分)。


现在,在原始的bin2dec中,您只需放入return bin2dec(bin, 0)。这只允许您在不初始化递归计数器的情况下调用bin2dec,这只是调用者不希望处理的一般簿记操作(此处不那么重要,但在较大的项目中非常重要)。

08-19 09:36