You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java代码无报错却无法运行,二进制转十进制函数异常求助

问题分析与修复方案

核心bug定位

你的代码里有一个致命错误:在while循环中更新n的值时,误用了n = n % 10,这会让n直接变成最后一位数字,循环仅执行一次就结束。正确操作应该是n = n / 10,这样才能每次去掉最后一位,遍历整个二进制数的每一位。

修复后的基础版本代码

public class BinaryToDec {
    public static void binToDec(int n) {
        int p = 0;
        int dec = 0;
        while (n > 0) {
            int ld = n % 10;
            dec += ld * (int) Math.pow(2, p);
            p++;
            n = n / 10; // 修正为除以10,去掉最后一位
        }
        System.out.println(dec);
    }

    public static void main(String args[]) {
        binToDec(1110001); // 现在会输出正确结果113
    }
}

优化建议:用字符串处理更可靠

用int传递二进制数有局限性——如果二进制数长度超过int范围(比如超过10位),会发生整数溢出导致错误。更稳妥的方式是用字符串作为参数,还能校验输入合法性:

public class BinaryToDec {
    public static void binToDec(String binaryStr) {
        int dec = 0;
        for (int i = 0; i < binaryStr.length(); i++) {
            char c = binaryStr.charAt(i);
            if (c != '0' && c != '1') {
                System.out.println("输入不是有效的二进制数");
                return;
            }
            dec = dec * 2 + (c - '0');
        }
        System.out.println(dec);
    }

    public static void main(String args[]) {
        binToDec("1110001"); // 输出113
    }
}

内容的提问来源于stack exchange,提问作者Bilal Sahi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 23:45:55