我的目标是从输入中获取一个包含一和零的字符串,然后使用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
)。
返回v
加bin2dec(bin, position + 1)
(这是实际的递归部分)。
现在,在原始的bin2dec
中,您只需放入return bin2dec(bin, 0)
。这只允许您在不初始化递归计数器的情况下调用bin2dec
,这只是调用者不希望处理的一般簿记操作(此处不那么重要,但在较大的项目中非常重要)。