Локально всё работает, валидатор не пропускает по третьему пункту.
package com.javarush.task.task18.task1804;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/*
Ввести с консоли имя файла.
Найти байт или байты с минимальным количеством повторов.
Вывести их на экран через пробел.
Закрыть поток ввода-вывода.
Требования:
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();
reader.close();
ArrayList<Byte> bytes = new ArrayList<>();
FileInputStream inputStream = new FileInputStream(fileName);
while (inputStream.available() > 0) {
int data = inputStream.read();
bytes.add((byte) data);
}
inputStream.close();
List<Counter> counter = new ArrayList<>();
boolean haveRepeat;
for (int i = 0; i < bytes.size(); i++) {
haveRepeat = false;
if (counter.size() == 0) {
Counter counter1 = new Counter(bytes.get(i), 1);
counter.add(counter1);
} else {
for (int k = 0; k < counter.size(); k++) {
if ((bytes.get(i) == counter.get(k).getName())) {
int xxx = counter.get(k).getCount();
xxx++;
counter.get(k).setCount(xxx);
haveRepeat = true;
}
}
if (!haveRepeat) {
counter.add(new Counter(bytes.get(i), 1));
}
}
}
ArrayList <Counter> arrayListGreaterThan1 = new ArrayList<>();
for (Counter c : counter) {
if (c.getCount() > 1) {
arrayListGreaterThan1.add(c);
}
}
ArrayList<Integer> counts = new ArrayList<>();
for (int l = 0; l < arrayListGreaterThan1.size(); l ++) {
counts.add(arrayListGreaterThan1.get(l).getCount());
}
Collections.sort(counts);
Integer minPovtoreniy = counts.get(0);
for (Counter elem : counter) {
if (elem.getCount() == minPovtoreniy) {
for (int m = 0; m < minPovtoreniy; m++) {
System.out.print(elem.getName() + " ");
}
}
// System.out.print(("Name: "
// + (elem.name + ("; Count: "
// + (elem.count + ";\n")))));
}
}
static class Counter {
public byte name;
public int count;
Counter(byte b, Integer i) {
this.name = b;
this.count = i;
}
public void setName(byte i) {
this.name = i;
}
public byte getName() {
return this.name;
}
public void setCount(int count) {
this.count = count;
}
public int getCount() {
return this.count;
}
}
}