Java中Hamming距离程序编写求助:String与int的Hamming距离计算
Java汉明距离计算程序问题解决与答疑
需求说明
- 编写名为
Thema3的Java类,包含main和hamming两个方法:hamming方法:接收两个字母数字字符串参数,返回二者的汉明距离;若参数长度不同,返回-1。main方法需完成:- 读取5个字符串存入数组,再读取目标字符串
target; - 调用
hamming方法计算每个数组元素与target的汉明距离,存入distances数组; - 找出
distances中的最小有效距离(排除-1),输出distances数组及对应最小距离的字符串。
- 读取5个字符串存入数组,再读取目标字符串
- 额外疑问:如何计算String与int之间的汉明距离?
原代码问题分析
原代码存在多处逻辑错误,导致无法正常运行:
- Scanner重复创建,且目标字符串
target的读取逻辑错误(被放在输入5个字符串的循环内,不符合需求); - 数组索引使用不符合Java常规习惯(定义长度为6的数组,使用1-5索引,建议用0-4);
- 存在与需求无关的无效逻辑(如无意义的do-while循环、Random随机数生成);
hamming方法命名不符需求(原代码为hammingdistance);- 冒泡排序方法逻辑错误且未被使用;
- 变量未提前声明(
target1在使用前未定义)。
修正后的完整代码
import java.util.Scanner; public class Thema3 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 创建存储5个字符串的数组 String[] stringList = new String[5]; // 读取5个字符串 for (int i = 0; i < stringList.length; i++) { System.out.print((i + 1) + ". Enter string: "); stringList[i] = scanner.nextLine(); } // 读取目标字符串 System.out.print("Enter target: "); String target = scanner.nextLine(); // 存储汉明距离的数组 int[] distances = new int[stringList.length]; // 计算每个字符串与target的汉明距离 for (int i = 0; i < stringList.length; i++) { distances[i] = hamming(stringList[i], target); } // 输出distances数组 System.out.print("Distances array: ["); for (int i = 0; i < distances.length; i++) { System.out.print(distances[i]); if (i != distances.length - 1) { System.out.print(", "); } } System.out.println("]"); // 找出最小有效距离(排除-1) int minDistance = Integer.MAX_VALUE; for (int distance : distances) { if (distance != -1 && distance < minDistance) { minDistance = distance; } } // 输出对应最小距离的字符串 System.out.println("Minimum valid distance: " + minDistance); System.out.println("Strings with minimum distance:"); for (int i = 0; i < stringList.length; i++) { if (distances[i] == minDistance) { System.out.println("- " + stringList[i]); } } scanner.close(); } // 计算两个字符串的汉明距离 public static int hamming(String str1, String str2) { if (str1.length() != str2.length()) { return -1; } int distance = 0; for (int i = 0; i < str1.length(); i++) { if (str1.charAt(i) != str2.charAt(i)) { distance++; } } return distance; } }
String与int的汉明距离计算说明
要计算String与int的汉明距离,核心是将二者转换为长度相同的二进制表示后,再按汉明距离规则比较:
- 若String是二进制格式字符串:将int转为二进制字符串,补前导零使其长度与目标String一致,再调用
hamming方法计算。 - 若String是普通字母数字字符串:先将每个字符转换为对应ASCII码的二进制(如8位二进制),拼接成完整二进制串;再将int转为相同长度的二进制串,最后计算汉明距离。
示例代码片段(二进制String与int的汉明距离):
public static int hammingStringInt(String binaryStr, int num) { // 将int转为二进制字符串,补前导零到与binaryStr相同长度 String numBinary = String.format("%" + binaryStr.length() + "s", Integer.toBinaryString(num)) .replace(' ', '0'); return hamming(binaryStr, numBinary); }
内容的提问来源于stack exchange,提问作者Konmich
相关产品推荐
相关产品推荐

