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

Java代码问题:计算两个int数组汉明距离出错,求排查指导

你的数组汉明距离代码分析与优化建议

嘿,作为编程新手能写出这样逻辑清晰的代码已经很出色了!先帮你拆解下当前代码的情况,再看看是不是有你可能误解的地方:

先看当前代码的正确性

你现在的代码实现的是数组层面的汉明距离——也就是两个等长数组中,对应位置元素不相等的个数。我们来跑你的测试用例验证:

  • 输入数组:aList = {1,3,3,4},bList = {1,2,10,4}
  • 对应位置对比:
    • 索引0:1 == 1 → 不计入
    • 索引1:3 != 2 → 计数+1
    • 索引2:3 != 10 → 计数+1
    • 索引3:4 == 4 → 不计入
  • 最终返回结果是2,这完全符合数组汉明距离的定义,你的代码逻辑是正确的!

可能的误解:二进制位的汉明距离?

如果你其实想计算的是「每个对应整数的二进制汉明距离之和」(也就是把数组里每一对数的二进制位不同的个数加起来),那当前代码就不符合需求了。举个例子,你的测试用例里:

  • 3(二进制0011)和2(二进制0010)的二进制汉明距离是1
  • 3(0011)和10(1010)的二进制汉明距离是2
  • 总和就是1+2=3

如果是这种需求,你可以修改代码,在遍历的时候计算每对整数的二进制汉明距离,再累加起来。Java里可以用Integer.bitCount(aList[i] ^ bList[i])来快速计算两个整数的二进制汉明距离(^是异或操作,相同位为0,不同位为1,bitCount统计1的个数)。修改后的代码如下:

public class HammingDistanceCalculator {
    public static int hammingDistance(int[] aList, int[] bList) {
        // 前置条件检查
        if (aList == null || bList == null || aList.length != bList.length)
            throw new IllegalArgumentException("Violation of precondition: " +
                    "hammingDistance. neither parameter may equal null, arrays" +
                    " must be equal length.");
        
        int counter = 0;
        // 遍历每一对元素,计算二进制汉明距离并累加
        for (int i = 0; i < bList.length; i++) {
            // 异或后统计1的个数,就是两个数的二进制汉明距离
            counter += Integer.bitCount(aList[i] ^ bList[i]);
        }
        return counter;
    }

    public static void main(String[] args) {
        int[] aList = { 1,3,3,4 };
        int[] bList = { 1,2,10,4 };
        // 此时输出会是3
        System.out.println(hammingDistance(aList, bList));
    }
}

小建议:代码规范

作为新手,给你提个小规范:Java的类名建议采用大驼峰命名,比如把原来的test改成HammingDistanceCalculator,这样代码可读性更强哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:05:30