Не могу понять, что не так. Понимаю что легко засунуть байты с количеством их повторений в Мапу и там уже вывести только те ключи, чьи значения максимальны, но хотел по другому решить.
В моем коде записываю в коллекцию только те байты чьё количество повторений максимальное и вывожу потом элементы коллекции через пробел.
package com.javarush.task.task18.task1803;
import java.io.FileInputStream;
import java.io.*;
import java.util.ArrayList;
/*
1. Программа должна считывать имя файла с консоли.
2. Для чтения из файла используй поток FileInputStream.
3. В консоль через пробел должны выводиться все байты из файла с максимальным количеством повторов.
4. Данные в консоль должны выводится в одну строку.
5. Поток чтения из файла должен быть закрыт.
*/
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader (new InputStreamReader(System.in));
String fileName = reader.readLine();
ArrayList<Integer> list = new ArrayList<>();
ArrayList<Integer> maxByte = new ArrayList<>();
ArrayList<Integer> result = new ArrayList<>();
try {
FileInputStream fileInput = new FileInputStream (fileName);
while (fileInput.available() > 0){
int data = fileInput.read();
list.add(data);
}
fileInput.close();
int maxCount = 0;
for (Integer a : list){
int count = 0;
for (Integer b : list){
if (a == b){
count++;
}
}
if (count > maxCount) {
maxCount = count;
maxByte.clear();
maxByte.add(a);
}
if (count == maxCount && count != 0) {
for (Integer y : maxByte) {
if (y==a)
break;
else
maxByte.add(a);
}
}
}
for (Integer x : maxByte) {
System.out.print(x + " ");
}
}
catch (Exception e){
e.printStackTrace();
}
}
}
byte[] bytes = new byte[256];и просто инкрементировать элемент по значению считанного байта?bytes[fileInput.read()]++Дальше найти максимум или максимумы и вывести их индекс/индексы. у меня просто глаз дёргается когда для подсчёта байтов создаётся список )