Java实现二进制转十进制算法运行结果异常问题求助
问题根因
- 代码的核心错误是
conversion *= 2的权重更新逻辑放在了if判断分支内部:只有遍历到的二进制位为1时才会更新权重,遇到0位时权重不会进位,直接导致后续高位的权重计算完全错误,和跨平台运行无关,是代码本身的逻辑缺陷。
我们可以直接复现你输入10110时的错误计算过程:
二进制
10110从低位到高位依次为0、1、1、0、1
第1位(最低位)为0:不进入if分支,result=0,conversion保持初始值1
第2位为1:result +=1 → result=1,conversion *=2 → 更新为2
第3位为1:result +=2 → result=3,conversion *=2 → 更新为4
第4位为0:不进入if分支,conversion保持为4
第5位(最高位)为1:result +=4 → result=7,conversion *=2 → 更新为8
最终输出7,和你反馈的错误结果完全一致。
修复方案
将conversion *= 2逻辑移到if判断外部,每遍历一位不管当前位是0还是1,权重都统一翻一倍即可,修正后代码如下:
public class Main { public static int convertToDecimal(String binary) { int conversion = 1; int result = 0; for(int i = 1; i <= binary.length(); i++) { if (binary.charAt(binary.length() - i) == '1') { result += conversion; } conversion *= 2; } System.out.println(result); return result; } public static void main(String[] args) { convertToDecimal("10110"); } }
运行修正后的代码会输出正确结果22,所有平台运行结果一致。
内容的提问来源于stack exchange,提问作者loopiedoopie111
相关产品推荐
相关产品推荐

