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

