Посчитать количество авторов примитивным способом
Нужно вывести "Пушкин - 2 и тд.." И не использовать мапы, сделать самым обычным способом. Я понимаю, что нужно сделать вместо булиан инт, но как сделать так, чтобы работало не совсем понимаю
public class arr {
// Общий метод для проверки дубликатов в массиве
public static boolean checkForDuplicates (String[] array) {
int count = 0;
// для каждого элемента массива проверяем, встречается ли он потом в массиве
for (int i = 0; i < array.length; i++) {
for (int j = i + 1; j < array.length; j++) {
if (array[i] != null && array[i].equals(array[j])) {
count++;
System.out.println(count);
return true;
}
}
}
// дубликат не найден
return false;
}
public static void main(String[] args) {
String[] array = {"Пушкин", "Пушкин", "Гоголь", "Толстой"};
String[] array2 = {"Капитанская дочка", "Дубровский", "Вий", "Война и мир"};
checkForDuplicates(array);
}
}
Ответы (1 шт):
Судя по представленному коду, в нём допускается замена дубликатов на null значения в исходном массиве, благодаря которой можно вывести количество авторов.
Такой метод можно переназвать printItemCount -- т.е. он будет выводить частоты элементов массива.
Предполагая, что исходный массив авторов не отсортирован, вычислим статистику авторов (элементов массива) следующим образом:
public static void printItemCount(String ... arr) {
for (int i = 0, n = arr.length; i < n; i++) {
if (arr[i] == null) {
continue;
}
String item = arr[i];
int count = 1;
for (int j = i + 1; j < n; j++) {
if (item.equals(arr[j])) { // или equalsIgnoreCase
count++;
arr[j] = null;
}
}
System.out.printf("%s: %d%n", item, count);
}
}
Если нужно сохранить входной массив, придётся скопировать его с помощью Arrays.copyOf или System.arraycopy и вставлять null-ы в массив-копию.