【问题标题】:Converting Binary to Decimal in Java [duplicate]在Java中将二进制转换为十进制[重复]
【发布时间】:2013-02-09 19:10:33
【问题描述】:

我几乎完成了实现一个代码,该代码允许用户将十进制数输入二进制,然后将二进制数反转,然后再转换回十进制。

我解决了所有问题,除了二进制到十进制部分。无论我输入什么,它都会一遍又一遍地给我相同的数字。我不明白为什么。基本上,为什么我的代码的最后一部分是错误的?我无法找到数组/字符串的长度,然后将其乘以 2^n 等...

【问题讨论】:

    标签: java binary decimal


    【解决方案1】:

    这段代码有两个问题。

    1) 您没有存储十进制到二进制转换的结果。您应该引入新的 String 变量来存储具有反转二进制值的字符串。

    2) 您的二进制转十进制算法不正确。 s.charAt(i) 返回 char 值,但您需要 double 值才能在计算中使用它。 Math.pow(2, (s.length() - i - 1)) 也不正确 - 据我所知,它适用于非反转的二进制值。

    固定版本的代码应如下所示:

    public static void main(String[] args) {
        int a[] = {0, 1};
    
        int number;
        int remainder;
        String binary = "";
    
        Scanner in = new Scanner(System.in);
    
        System.out.print("Enter Decimal Number: ");
        number = Integer.parseInt( in.next());
    
        System.out.print("Binary Number in Reverse: ");
        do {
            remainder=number%2;
            if(remainder > 0){
                binary += a[1];
                //System.out.print(a[1]);
            }
            else{
                binary += a[0];
                //System.out.print(a[0]);
            }
            number=number / 2;
        } while(number>0);
    
        System.out.print(binary);
    
        System.out.print(" \nDecimal number: ");
        //String s = Integer.toString(number);
        double result = 0;
        for (int i = 0; i < binary.length(); i++)
           result = result + Double.parseDouble(binary.substring(i, i + 1)) * Math.pow(2, i);
        System.out.print(result);
    }
    

    【讨论】:

    • 谢谢。实际上,我想要反向二进制十进制输出,但我可以自己做。非常感谢!!
    【解决方案2】:

    number 将根据您的 do-while 循环条件始终为零或更小:while(number&gt;0);

    这会导致您的变量 s(请选择更好的变量名...)始终为“0”。

    我想你可以弄清楚其余的。

    【讨论】:

    • 你能给我一个更大的提示吗?我还是一头雾水?即使我删除了do-while,它仍然是同样的错误
    • @Euridice01 你说:`无论我输入什么,它都会一遍又一遍地给我相同的数字。` 你的变量s 将始终等于“0”。这就是为什么您每次都获得相同的价值。请自己进行一些基本调试,看看是否可以使程序按预期工作。
    • 对不起。我已经研究了2个多小时,但我仍然感到困惑。 do-while 中的数字总是大于 0?那有什么问题?为什么 S 为零?
    猜你喜欢
    • 2015-06-02
    • 2011-07-09
    • 2013-01-24
    • 1970-01-01
    • 2015-10-27
    • 2018-06-05
    • 2012-01-02
    • 1970-01-01
    • 2020-04-03
    相关资源
    最近更新 更多