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




Вам нужно сбрасывать 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; из внутреннего цикла.
место, в котором он сейчас находится, не является оптимальным, но не является ошибкой, поскольку не меняет поведения программы.
Множественные проблемы
Не нужно создавать временную переменную. Это просто накладные расходы на память.
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;
}