Сравнение каждой строки в массиве строк с одной строкой пользовательского ввода с использованием вложенных циклов for - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь сравнить две строки и суммировать различия их символов. Одна строка является пользовательским вводом (вводом), а другая - из массива строк (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;
}

Это не работает, но я не совсем уверен, почему. Два цикла делают именно то, что я от них хочу, но мое утверждение if или способ суммирования различий не соответствуют ожиданиям. Кто-нибудь может увидеть какие-либо вопиющие ошибки? Спасибо!

Ответы [ 3 ]

0 голосов
/ 14 сентября 2018

Инициализировать счетчик над внутренним циклом и вывести difference_array[i] = count; из внутреннего цикла.

0 голосов
/ 14 сентября 2018

Множественные проблемы

  1. счетчик должен сбрасываться каждый раз
  2. Размер массива жестко задан.Он должен быть установлен как размер binary_patterns_array
  3. diff_array [i] должен быть установлен вне внутреннего цикла.
  4. Нет необходимости создавать временную переменную.Это просто накладные расходы памяти.

    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;
    }
    
0 голосов
/ 14 сентября 2018

Вам нужно сбрасывать count на каждой итерации шаблона:

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...