Java 使用嵌套for循环将字符串数组中的每个字符串与一个用户输入字符串进行比较

Java 使用嵌套for循环将字符串数组中的每个字符串与一个用户输入字符串进行比较,java,arrays,for-loop,Java,Arrays,For Loop,我试图比较两个字符串并求其字符差异的和。一个字符串是用户输入(input),另一个来自字符串数组(binary_patterns_array) 我想将数组中的每个字符串与输入进行比较,并将它们的差异之和放入另一个int数组中。我有另一个方法,它遍历int数组以找到最小的值,这将为我提供最接近匹配模式的索引。代码如下: public static int[] difference(String input, String[] binary_patterns_array){ int[] di

我试图比较两个字符串并求其字符差异的和。一个字符串是用户输入(input),另一个来自字符串数组(binary_patterns_array)

我想将数组中的每个字符串与输入进行比较,并将它们的差异之和放入另一个int数组中。我有另一个方法,它遍历int数组以找到最小的值,这将为我提供最接近匹配模式的索引。代码如下:

public static int[] difference(String input, String[] binary_patterns_array){
    int[] difference_array = new int[32];
    String  binary_pattern = "";
    int count = 0;
    for(int i = 0; i < binary_patterns_array.length; i++){
        binary_pattern = binary_patterns_array[i];
        for(int j = 0; j < input.length(); j++){
            if (binary_pattern.charAt(j) != input.charAt(j)){
                count += 1;
            }
         difference_array[i] = count;
        }
    }
    return difference_array;
}
publicstaticint[]差异(字符串输入,字符串[]二进制\u模式\u数组){
int[]差分数组=新的int[32];
字符串二进制_模式=”;
整数计数=0;
对于(int i=0;i

这不起作用,但我不确定为什么。这两个循环完全符合我的要求,但我的if语句或求和差异的方式并没有达到我的期望。有人能看到任何明显的错误吗?谢谢大家!

您需要在每个模式迭代中重置
计数

public static int[] difference(String input, String[] binary_patterns_array){
    int[] difference_array = new int[32];
    String  binary_pattern = "";
    for(int i = 0; i < binary_patterns_array.length; i++){
        int count = 0; // moved inside the loop so it is 0 at the beginning of each pattern
        binary_pattern = binary_patterns_array[i];
        for(int j = 0; j < input.length(); j++){
            if (binary_pattern.charAt(j) != input.charAt(j)){
                count += 1;
            }
        }
        difference_array[i] = count; // moved because it is cleaner outside the inner loop
    }
    return difference_array;
}
publicstaticint[]差异(字符串输入,字符串[]二进制\u模式\u数组){
int[]差分数组=新的int[32];
字符串二进制_模式=”;
对于(int i=0;i
初始化内部循环上方的计数,并将差分数组[i]=计数超出内部循环。

多个问题

  • 每次都应重置计数
  • 数组大小是硬编码的。它应该设置为二进制\u模式\u数组的大小
  • 差分_数组[i]应设置在内部循环之外
  • 不需要创建临时变量。这只是内存开销

    public static int[] difference(String input, String[] binary_patterns_array) {
    int[] difference_array = new int[binary_patterns_array.length];
    
    for (int i = 0; i < binary_patterns_array.length; i++) {
        int count = 0;
        for (int j = 0; j < input.length(); j++) {
            if (binary_patterns_array[i].charAt(j) != input.charAt(j)) {
                count++;
            }               
        }
        difference_array[i] = count;
    }
    return difference_array;
    }
    
    publicstaticint[]差异(字符串输入,字符串[]二进制\u模式\u数组){
    int[]差分数组=新的int[binary\u patterns\u array.length];
    对于(int i=0;i

  • 没有做我希望的事情——它在做什么?你能提供一个示例输出吗?它当前所在的位置不是最佳的,但不是一个bug,因为它不会改变程序的行为。