package com.javarush.test.level18.lesson03.task03;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Objects;
/* Самые частые байты
Ввести с консоли имя файла
Найти байт или байты с максимальным количеством повторов
Вывести их на экран через пробел
Закрыть поток ввода-вывода
*/
public class Solution {
public static void main(String[] args) throws Exception
{
ArrayList<Integer> array = new ArrayList<>();
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
FileInputStream iStream = new FileInputStream(reader.readLine());
while (iStream.available() > 0)
{
array.add(iStream.read());
}
int[] repeats = new int[array.size()];
for (int i = 0; i < array.size(); i++)
{
int count = 0;
for (int j = 0; j <array.size() ; j++)
{
if (Objects.equals(array.get(i), array.get(j))) count++; //альтернативное сравнение
}
repeats[i] = count;
}
int max = findMax(repeats);
ArrayList<Integer> equalInts = new ArrayList<>(); //в этот список заносим числа, которые уже были выведены на экран
int[] array1 = new int[array.size()];
for (int i = 0; i < array.size(); i++)
{
array1[i] = array.get(i);
}
for (int i = 0; i < repeats.length; i++) //запускаем цикл, который будет проверять, то ли это максимальное число, или нет, и выводит его значение на экран
{
if (repeats[i] == max) { //если это тот самый максимум (14)
boolean b = true; //было или не было число
for (Integer equalInt : equalInts) //мы должны проверить, не выводили ли мы это самое число уже, массив equalInt содержит числа, которые мы уже выводили
{
if (equalInt == repeats[i]) b = false;
}
if (b) {
equalInts.add(repeats[i]);
System.out.println(array1[i] + " ");
}
}
}
}
private static int findMax(int[] repeats)
{
int max = 0;
for (int i = 0; i < repeats.length; i++)
{
if (max < repeats[i]) max = repeats[i];
}
return max;
}
}
Leave A Comment