【问题标题】:Binary to Decimal with Arrays二进制到十进制数组
【发布时间】:2021-05-18 21:42:27
【问题描述】:

我正在尝试将二进制数(由具有 0 和 1 的数组构造)转换为十进制值。每次我运行程序时,十进制值都会偏离。我想知道循环内的小数点代码是否错误?到目前为止,这是我所拥有的:

class Main {
    public static void main(String[] args) {
        int decimal = 0;
        int[] arrayNums = new int[8];
        for(int i=0; i<8; i++) {
            arrayNums[i] = (int)(Math.random()*2);
            System.out.print(arrayNums[i]);
        }
        for(int i=0; i<8; i++) {
            for(int j=7; j>=0; j--) {
                decimal += arrayNums[i]*(int)Math.pow(2,j);
            }
        }
        System.out.println();
        System.out.print("The decimal value is: " + decimal);
    }
}

【问题讨论】:

  • ""十进制值相差甚远 - 请展示一些输入和输出示例,并说明您为调试代码所做的工作。您是否在 IDE 调试器中单步执行?
  • 您可以将数组转换为字符串并使用Integer.parseInt(string, 2)。这还将您的二进制数转换为十进制数。例如。 String string = Arrays.stream(arrayNums).boxed().map(i -&gt; Integer.toString(i)).collect(Collectors.joining())

标签: java arrays for-loop binary decimal


【解决方案1】:

让我们保留您现有的代码并尝试修复它(我还将稍微清理一下您的语法以获得良好的代码风格)。

到目前为止,您的 for 循环正在以这种方式填充您的数组,其中每个列表条目都是循环的每次迭代:

  1. [0, , , , , , , ]
  2. [0,1, , , , , , ]
  3. ...
  4. ...
  5. ...
  6. ...
  7. ...
  8. [0,1,0,0,0,0,0,1]

请记住,当i=0 时,我们处于最重要位,这意味着它的十进制值为 128。

当您使用第二个 for 循环读取此数组时,您实际上是从最高有效位开始,但将其提高到 0 次方,而不是 7 次方。 这就是为什么你的答案是错误的。让我们把它提升到7-i 的力量。

class Main 
{
    public static void main(String[] args) 
    {
        int n = 0;
        int decimal = 0;
        int[] arrayNums = new int[8];
        for(int i=0; i<8; i++)
        {
            arrayNums[i] = (int)(Math.random()*2);
            System.out.print(arrayNums[i]);
        }

        for(int i=0; i<8; i++)
        {
            decimal += arrayNums[i]*(int)Math.pow(2,7-i);

        }
        System.out.println("\nThe decimal value is: "+decimal);
    }
}

ps。 \n 只是一个转义字符,它告诉控制台窗口打印一个新行。这只是为了格式化。

【讨论】:

  • 感谢您的帮助!这更有意义。
【解决方案2】:

你把要转换的循环复杂化了。像这样试试。将前一个十进制值乘以 2,然后添加该位。每次乘法将值左移 1 位。您不需要 Math.pow() 方法,因为它会在您 "shift" 值时自动工作。我建议你在纸上试一试,看看它是如何工作的,以确保你理解它。

int decimal = 0;
for (int i = 0; i < 8; i++) {
    decimal = decimal * 2 + arrayNums[i];
}

【讨论】:

    猜你喜欢
    • 2012-10-08
    • 2015-01-21
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-27
    • 1970-01-01
    相关资源
    最近更新 更多