有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java(数组)中二进制到十进制转换的问题

我的任务是将JLabel数组中的二进制转换为十进制,而不使用预先编写的方法(没有用户输入)。我有一个正确的想法,但由于某些原因,输出总是有点差。我已经经历了无数次,但我没有发现我的算法有任何错误,我很困惑为什么它不能产生正确的答案。如果有人能帮助我,我将非常感激。谢谢

旁注:我读过关于二进制到十进制转换的类似讨论,但我不明白如何使用数组

以下是我的代码片段:

   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); 
   }

共 (2) 个答案

  1. # 1 楼答案

    你从左到右跟随二进制数,但抓错了数字。你想要相同的数字,但要乘以二的右幂——第一个索引是+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. # 2 楼答案

    显然,你的代码片段中有一个bug

    您设置了数字[x],但没有设置数字[length-1-x]

    例如,x=0,您设置了数字[0],但没有设置数字[7]。
    因此,当您想在此处使用数字[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); 
    }
    

    没有测试代码。但我认为它会奏效