我的目标是从输入中获取由 1 和 0 组成的字符串,然后使用 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, intposition)
(这称为重载方法,两个方法可以具有相同的名称,只要它们的签名相同)是不同的)。在这种新方法中,您可以遵循上面概述的算法:
如果
position
等于bin.length()
,则已经超出了字符串的末尾。只需返回 0。否则,将
v
设置为等于position
处字符的整数值(您可以使用整数解析方法,也可以仅使用if
/ternary 因为只有两个选项)。将
v
乘以2^position
(提示:Math.pow
)。返回
v
加上bin2dec(bin,position + 1)
(这是实际的递归部分)。
现在,在原来的bin2dec
中,您可以只输入return bin2dec(bin, 0)
。这只是允许您在不初始化递归计数器的情况下调用 bin2dec,这只是调用者不想处理的一般簿记(这里不太重要,但在较大的项目中非常重要)。 p>
关于java - 递归地将一串 1 和 0 解析为其十进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26372038/