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
相关产品推荐
相关产品推荐

