Тут на самом деле довольно любопытная штука происходит. Почитай про битовое И, есть пара значимых отличий от логического. В частности не работают короткие замыкания.
Ну и если бы ты сравнивал не boolean значения то результат оказался бы не таким очевидным :) Короче осторожнее с этим оператором. Он классный и полезный, но только там где нужен.
попробуй убрать & 0xFF и оставить просто frequency[buffer[i]]++;
Если хочешь чтобы наверняка прошло, то сделай просто через available(без буффера вообще), а подсчет как раз через inputStream.read(). Дерзай
Интересно как быстро ты так вылетишь в отрицательные границы массива :) какой диапазон у byte?
Читать буфером как раз идея правильная, чтобы не насиловать IO.
Код выглядит почти правильно, вопросительные знаки на валидации значат что он просто не скомпилировался на сервере, попробуй переотправить на проверку когда сделаешь код рабочим
Махинация с буфером тут явный оверхед. Просто для верности спрошу, ты точно понимаешь что происходит на 20й строке и зачем оно нужно? :)
Кроме того есть вопросы к нахождению минимального количества вхождений. Ты точно уверен что понимаешь как работает битовое И? Кроме того, перебирая количество вхождений символа, а именно это хранится в индексах массива очень странно выгляит min = 255, что это за волшебное число? Положим я скормлю твоему коду где самый редкий байт встречается 300 раз, он его найдёт?
Еще возможные узкие места - тебя просят закрыть поток ввода-вывода, попробуй это сделать явно, без try-with-resources.
на 20 читаем из буфера по одному байту, переводим в диапазон 0-255 (так как byte -127...128) и элемент частотного массива инкрементируем, Вместо 255 ставил Integer. value.MAX. Не помогает. С Available почему то прошло
Что ж, порой местные тесты правда ожидают странные конструкции. Хорошо что ты понимаешь разницу между знаковым и беззнаковым представлением :) реализация с MAX более точная. Можно было бы еще подумать как опираться на реальные данные, но в рамках учебной задачи это лишнее.