java - 递归地将一串 1 和 0 解析为其十进制值

标签 java string parsing decimal converters

我的目标是从输入中获取由 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)(这称为重载方法,两个方法可以具有相同的名称,只要它们的签名相同)是不同的)。在这种新方法中,您可以遵循上面概述的算法:

  1. 如果position等于bin.length(),则已经超出了字符串的末尾。只需返回 0。

  2. 否则,将 v 设置为等于 position 处字符的整数值(您可以使用整数解析方法,也可以仅使用 if/ternary 因为只有两个选项)。

  3. v 乘以 2^position(提示:Math.pow)。

  4. 返回v加上bin2dec(bin,position + 1)(这是实际的递归部分)。

现在,在原来的bin2dec中,您可以只输入return bin2dec(bin, 0)。这只是允许您在不初始化递归计数器的情况下调用 bin2dec,这只是调用者不想处理的一般簿记(这里不太重要,但在较大的项目中非常重要)。 p>

关于java - 递归地将一串 1 和 0 解析为其十进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26372038/

相关文章:

java - 如何使用 log4j 编写多级日志消息? (例如信息和错误)

javascript - 我如何知道 Rhino 中的异步 JavaScript 执行何时完成

java - 热敏收据打印机自动剪切问题

r - 第一个字母改为大写

python - 使用biopython解析fasta文件来计算属于每个ID的序列读取数

AngularJS - 在表达式中使用逗号或其他特殊字符来观察 $scope.$watch

java - 从字符串中删除相邻的重复项

java - 在 GridBagLayout 中设置 columnWidth 和 rowHeight

php - 如何将换行符/换行符内爆到空格?

python - 使用 python 解析 CSV 文件并转换为 Pandas Dataframe 以绘制 Django 模板的图形