Сравнение каждой строки в массиве String с одной строкой пользовательского ввода с использованием вложенных циклов for

Я пытаюсь сравнить две строки и суммировать различия их символов. Одна строка - это пользовательский ввод (ввод), а другая - из массива строк (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 или способ суммирования различий не делают того, на что я надеялся. Кто-нибудь может увидеть какие-нибудь вопиющие ошибки? Спасибо!

не делает то, на что я надеялся - что он вместо этого делает?
Tim 14.09.2018 17:12

Можете ли вы предоставить пример вывода?

Maruthi Adithya 14.09.2018 17:13
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
73
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вам нужно сбрасывать 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;
}

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

место, в котором он сейчас находится, не является оптимальным, но не является ошибкой, поскольку не меняет поведения программы.

luk2302 14.09.2018 17:14

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

  1. счетчик должен сбрасываться каждый раз
  2. Размер массива жестко задан. Он должен быть установлен как размер binary_patterns_array
  3. Difference_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;
    }
    

Другие вопросы по теме