【问题标题】:Problems with Binary to Decimal conversion in java (arrays)java(数组)中二进制到十进制转换的问题
【发布时间】:2016-07-10 05:02:15
【问题描述】:

我的任务是将 JLabel 数组中的二进制转换为十进制,而不使用预先编写的方法(没有用户输入)。我有正确的想法,但由于某种原因,输出总是有点偏离。我已经经历了无数次,但我找不到我的算法有什么问题,而且我很困惑为什么它不能产生正确的答案。如果有人可以帮助我,我将不胜感激。谢谢!

旁注:我已经阅读过关于二进制到十进制转换的类似讨论主题,但我不明白如何使用数组进行操作。

这是我的代码的 sn-p:

   private void convert()
   {
    int[] digit = new int[8]; //temporary storage array
    int count = 0;
    for(int x = 0; x < digit.length; x++)
     {
     digit[x] = Integer.parseInt(bits[x].getText()); //bits is the original array
     count= count + digit[digit.length - 1 - x] * (int)(Math.pow(2, x)); 
    }
     label.setText("" + count); 
   }

【问题讨论】:

  • digit[] 是否存储二进制数的位数?计数有什么作用?
  • @ProgyadeepMoulik 在数组的每个单元格中都有一个 1 或一个 0,因此程序会将每个位值转换为十进制并将其全部加起来。 Count 会跟踪该总和。是的, digit[] 存储二进制数的数字。每个单元格一个数字,我的程序的另一部分确保它始终是随机的 0 或 1。

标签: java arrays binary decimal


【解决方案1】:

您从左到右跟踪二进制数,但抓错了数字。您想要相同的数字,但要乘以 2 的右幂 - 第一个索引是 +n*128 而不是 +n*1

int count = 0;
for(int i = 0; i < bits.length; i++) {
    count += Integer.parseInt(bits[i].getText()) * Math.pow(2, bits.length - i - 1);
}

【讨论】:

    【解决方案2】:

    显然你的 sn-p 中有一个错误。

    您设置了数字[x],但没有设置数字[长度 - 1 - x]。

    例如,x = 0,你设置了数字[0],但没有设置数字[7]。
    所以当你想在这里使用 digit[length - 1 -x] 时会出现错误:

    count= count + digit[digit.length - 1 - x] * (int)(Math.pow(2, x));
    

    这是正确的代码:

    private void convert()
    {
        int count = 0, length = 8;
        for(int i = 0; i < length; count += Integer.parseInt(bits[i].getText()) * (1 << (length - 1 - i)), i++);
        label.setText("" + count); 
    }
    

    尚未测试代码。但我认为它会起作用。

    【讨论】:

      猜你喜欢
      • 2021-01-03
      • 2020-06-25
      • 2014-02-20
      • 2012-11-08
      • 2018-02-06
      • 1970-01-01
      • 2013-05-22
      • 2011-01-10
      • 2020-05-15
      相关资源
      最近更新 更多