Как я могу определить, каких символов в ArrayList больше всего?
Например, пользователь вводит число 300233. Мне нужно, чтобы выводилось что-то вроде "В числе больше всего - троек". Пока что я смог разделить число на символы,
public static void main(String[] args) {
ArrayList listOfNumbers = new ArrayList();
int number = 0;
System.out.println("Привет, введи число: ");
Scanner scanner = new Scanner(System.in);
if (scanner.hasNextInt()) {
number = scanner.nextInt();
}
while (number != 0) {
listOfNumbers.add(number % 10);
number /= 10;
}
}
но что делать дальше, понятия не имею
Ответы (2 шт):
Автор решения: Agzam
→ Ссылка
Код
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
System.out.println("Привет, введи число: ");
Scanner scanner = new Scanner(System.in);
String num = scanner.nextLine();
scanner.close();
int max = 0;
int maxNum = 0;
for (int i = 0; i < 10; i++) { // идем от 0 до 9
int count = num.length() - num.replaceAll(i + "", "").length(); // Сколько символов "i"
if(count > max) {
max = count;
maxNum = i;
}
}
System.out.println("Ответ: " + maxNum);
}
}
Console:
Привет, введи число:
> 300233
Ответ: 3
Автор решения: Alex Rudenko
→ Ссылка
Список для хранения отдельных цифр здесь лишний, имеет смысл завести массив на 10 элементов для подсчёта частоты цифр:
int x = number;
int[] freq = new int[10];
int maxFreq = 0;
int maxDigit = -1;
while (number != 0) {
int n = number % 10;
if (++freq[n] > maxFreq) {
maxDigit = n;
maxFreq = freq[n];
}
number /= 10;
}
System.out.printf("Самая частая цифра в числе %d: %d, встречается %d раз(а)%n",
x, maxDigit, maxFreq
);
Однако в таком случае будет определяться первая самая частая цифра. Для поиска всех цифр с наибольшей частотой надо проитерировать массив частот и выводить соответствующие цифры.