Валидатор пишет "Не нужно несколько раз выводить один и тот же байт.".
С начала программа добавляет в список все считываемые байты из файла. И в конечном итоге выводит из этого списка по условиям сформированым с помощью манипуляций с мапами. Проверял дебагером - из листа выводятся не копии одного и того же байта, а именно разные байти. Что не так? Почему валидатор не пропускает?
package com.javarush.task.task18.task1803;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.*;
/*
Ввести с консоли имя файла.
Найти байт или байты с максимальным количеством повторов.
Вывести их на экран через пробел.
Закрыть поток ввода-вывода.
Требования:
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 fName = reader.readLine();
FileInputStream fileInputStream = new FileInputStream(fName);
// int t = 0;
ArrayList<Integer> list = new ArrayList<>();
while (fileInputStream.available() > 0) {
int data = fileInputStream.read();
list.add(data);
// int y = list.get(t);
// t++;
}
fileInputStream.close();
Collections.sort(list);
HashMap<Integer, Integer> map1 = new HashMap<>();
for (int i = 0; i <= list.size()-1; i++) {
map1.put(list.get(i), Collections.frequency(list, list.get(i)));
}
int max = 0;
for (Integer value : map1.values()) {
if (max < value) {
max = value;
}
}
int x = 0;
for (Map.Entry<Integer,Integer> pair : map1.entrySet()) {
if (max == pair.getValue()) {
x = pair.getKey();
}
}
for (int i = 0; i < list.size(); i++) {
if (list.get(i) == x) {
System.out.print(list.get(i) + " ");
}
}
}
}