Логика программы описана в комментариях в коде
Возможно, проблема в том, что я повторно считываю файл, закрывая и открывая заново поток
Но условию, по идее, это соответствует
package com.javarush.task.task18.task1803;
/*
Самые частые байты
*/
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String fileName = reader.readLine();
reader.close();
// считываем сами байты и заносим их в первый список
FileInputStream filereader = new FileInputStream(fileName);
ArrayList<Integer> byteList = new ArrayList<>();
while(filereader.available()>0){
int x = filereader.read();
if(!byteList.contains(x)) byteList.add(x);
}
filereader.close();
// снова считываем байты и количество их повторений заносим во второй список
filereader = new FileInputStream(fileName);
ArrayList<Integer> amountOfBytes = new ArrayList<>(byteList.size());
for (int i = 0; i < byteList.size(); i++) {
amountOfBytes.add(0);
}
int indexOfByte;
while(filereader.available()>0){
indexOfByte = byteList.indexOf(filereader.read());
amountOfBytes.set(indexOfByte, amountOfBytes.get(indexOfByte)+1);
}
filereader.close();
// находим число, которое показывает наибольшее повторение
// индекс этого числа во втором листе совпадает с индексом в первом, где находятся сами байты
int max = amountOfBytes.get(0);
for (int i = 1; i < amountOfBytes.size(); i++) {
if(amountOfBytes.get(i)>max) max = amountOfBytes.get(i);
}
String result = "";
// находим сами байты с наибольшим повторением и заносим их в result
for (int i = 0; i < amountOfBytes.size(); i++) {
if(max==amountOfBytes.get(i)) {
result += String.valueOf(byteList.get(i)) + " ";
}
}
System.out.println(result);
}
}