我的目标是从输入中获取一个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){
}
}
答案 0 :(得分:1)
执行此操作的算法实际上非常简单。
如果你看一个二进制字符串,比如说," 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
,这只是一般的簿记,呼叫者不想处理(这里不是那么重要,但在大型项目中非常重要)。
答案 1 :(得分:0)
public static String showAsBinString(int n, String s){
if(n > 1){
s = showAsBinString(n/2, s);
}
s += n%2 == 0 ? "0" : "1";
return s;
}
System.out.println(showAsBinString(45, ""));
101101