Аналогичное решение для максимального байта прошло "на ура"
Сейчас пишет (читать голосом Йоды): "два раза зачем байт один и тот же выводишь ты....? "
я голову сотряс в раздумьи....помогайте, друзья !
package com.javarush.task.task18.task1804;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
/*
Самые редкие байты
*/
public class Solution {
// ниже есть класс FileByte для хранения пары байт - количество
public ArrayList<FileByte> filebytes = new ArrayList<>(); // создаем массив для наших пар
public static void main(String[] args) throws Exception {
Solution sol =new Solution(); // создаем экземпляр для работы с массивом filebytes
BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
FileInputStream input = new FileInputStream(reader.readLine());
while (input.available() > 0) {
int data = input.read();
sol.checkSymbol(data); // метод класса Solution для обработки считанных байтов
// проверяет есть ли такой байт и решает, заносить ли его в массив или
// изменить количество у имеющегося элемента
}
reader.close();
input.close(); // все считали, массив наполнили, потоки закрыли
ArrayList<FileByte> min = new ArrayList<>(); // массив для минимальных элементов
int mincount = sol.filebytes.get(0).getCount() ; // принимаем за минимум значение кол-ва от нулевого
// элемента общего массива
for (int i = 1; i < sol.filebytes.size(); i++) {
int currentCount = sol.filebytes.get(i).getCount();
if (mincount > currentCount)
mincount = currentCount;
} // этот цикл проверил, какое количество минимальное, сравнив все элементы кроме первого
for (int i = 0; i < sol.filebytes.size(); i++) {
int currentCount = sol.filebytes.get(i).getCount();
if (mincount == currentCount)
min.add(sol.filebytes.get(i));
} // этот цикл наполнил массив минимальных элементов
for (int i = 0; i < min.size() -1 ; i++) {
System.out.print(min.get(i).getSymbol() + " ");
} // вывели байты с минимальным кол-вом
System.out.println(min.get(min.size()-1).getSymbol()); // вывод последнего элемента без пробела
}
public void checkSymbol (int testbyte) { // этот метод, при считывании, проверяет байт
for (int i = 0; i < filebytes.size(); i++) { // и либо добавляет новый, либо меняет существующему кол-во
if (testbyte == filebytes.get(i).getSymbol()) {
filebytes.get(i).addCount();
break;
}
}
filebytes.add(new FileByte(testbyte));
}
public class FileByte {
private int symbol;
private int count=0;
public FileByte(int symbol) {
this.symbol = symbol;
this.count++;
}
public int getCount() {
return count;
}
public void addCount() {
this.count++;
}
public int getSymbol() {
return symbol;
}
}
}