首页 > 解决方案 > 我正在尝试将二进制数转换为十进制数,但我的输出始终为 0

问题描述

这是我的代码。我尝试将二进制转换为 Char 数组,然后将数组中的每个 char 乘以 2 到数组中其对应数字的幂,然后将 char 数组的所有值相加成双精度数。编程新手,所以有点困惑。我的输入二进制是 txfBinaryInput,我的输出标签是 lblDisplay。

 private void btnProcessActionPerformed(java.awt.event.ActionEvent evt)                                           
{                                               
    if (txfBinaryInput.getText().equals(""))
    {
        lblDisplay.setText("ERROR: NO INPUT");
    } else
    {
        int n = 0;
        int[] binaryValueStorage = new int[100];
        double[] decimalValueStorage = new double[100];
        String binaryInput = txfBinaryInput.getText();
        int binaryNumber = binaryInput.length();
        char[] binaryDigits = binaryInput.toCharArray();
        for (int i = 0; i >= binaryNumber; i++)

        {
            binaryValueStorage[n] = binaryDigits[n];
            decimalValueStorage[n] = binaryValueStorage[n] * (Math.pow(2, n));
            n++;
        }
        double sum = 0;
        for (double a : decimalValueStorage)
        {
            sum += a;
        }
        lblDisplay.setText("The Deciaml Value Is " + sum);
    }
}                                          

标签: javabinary

解决方案


当心:在你的 for 循环条件中,你有i >= binaryNumber而不是i < binaryNumber,因此你的程序永远不会进入循环!

顺便说一句,为什么要使用两个变量in,用于相同的目的(递增和访问数组)?

编辑:另一个问题:

在二进制数中,低位在右边,但在数组中,索引从左到右

因此,您希望最右边的数字乘以 2^0,右边的下一个数字乘以 2^1,依此类推。

但在您的代码中,发生的情况恰恰相反:它是最左边的数字(索引 0 处的数字)乘以 2^0!

要修复,您可以:

1)在开始转换之前反转您的数组,并保持其余代码不变binaryDigits

2)替换decimalValueStorage[n] = binaryValueStorage[n] * (Math.pow(2, n));decimalValueStorage[n] = binaryValueStorage[n] * (Math.pow(2, binaryNumber - n));

希望这可以帮助!


推荐阅读