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

Java中Hamming距离程序编写求助:String与int的Hamming距离计算

Java汉明距离计算程序问题解决与答疑

需求说明

  • 编写名为Thema3的Java类,包含main和hamming两个方法:
    1. hamming方法:接收两个字母数字字符串参数,返回二者的汉明距离;若参数长度不同,返回-1。
    2. main方法需完成:
      • 读取5个字符串存入数组,再读取目标字符串target;
      • 调用hamming方法计算每个数组元素与target的汉明距离,存入distances数组;
      • 找出distances中的最小有效距离(排除-1),输出distances数组及对应最小距离的字符串。
  • 额外疑问:如何计算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的汉明距离,核心是将二者转换为长度相同的二进制表示后,再按汉明距离规则比较:

  1. 若String是二进制格式字符串:将int转为二进制字符串,补前导零使其长度与目标String一致,再调用hamming方法计算。
  2. 若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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:40:28