Я вообще не понял, что такое байты с минимальным количеством повторов, что такое в принципе байты с повторами в контексте чтения имени файла? Вот допустим есть какое-то имя файла. В зависимости кодировки один символ занимает один или больше байт. Как выглядят повторы на практике? Это количество одинаковых символов в строке или что? Если предположить, что один символ весит один байт, то тогда я должен 1. Записать первый символ(байт) в переменную 2. Перебрать в цикле все символы имени файла и если какой-то другой символ совпадает с записанным, то счетчик повторов, равный по умолчанию единице увеличивается. 3. Сохранить счетчик для символа 4. Проделать с другими символами то же самое. Сравнить счетчики и вывести наибольшее значение В правильном решении я вижу совсем другое. Никаких сравнений символов, только сравнение чисел Счетчик увеличивается сразу. Как это работает? И еще, что если символ весит больше, чем один байт?
Anonymous #3525583
28 уровень
Объясните суть задания
Обсуждается
Комментарии (5)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Marat Safiianov
5 мая 2025, 13:52
Считывать надо байты, а не символы. Представьте, что файл это вообще картинка jpg.
Строк тоже нет. Считывается СОДЕРЖИМОЕ, а не ИМЯ файла.
Считать надо БАЙТЫ. Байты будут повторяться в значениях в пределах своего допустимого диапазона: от минимального до максимального.
0
Anonymous #3525583
5 мая 2025, 14:05
Так еще больше непонятно. Один байт это некий двоичный код, так? Допустим один байт выглядит так [00101011] И если где-то встретится байт с таким же кодом, то это будет считаться повтором? Как его отловить и вычленить из потока?
0
Marat Safiianov
5 мая 2025, 14:06
Какое представление имеет метод чтения байта из потока?
0
hidden #3303140
5 мая 2025, 14:23
Любой файл состоит из байтов, в том числе текстовый. Когда ты читаешь текст из файла, ты на самом деле сначала читаешь байты, а потом некоторая надстройка преобразует байты в символы в соответствии с используемой кодировкой. Кодировка - это правило преобразования байтов в символы, это касается только текстовых файлов.
На более низком уровне представления - да, все файлы состоят из байтов, а каждый байт - это восемь бит. Но это уже слишком низкий уровень представления, тебе так глубоко смотреть не надо. Потому что для удобства работы с файлами ты оперируешь не отдельными битами, а целыми восьмёрками - байтами. Когда ты вызываешь InputStream.read(), этот метод прочитывает тебе из файла один байт и возвращает тебе его значение в десятичном виде. Это называется беззнаковым байтом, то есть значения от [00000000] до [11111111] будут представлены числом от 0 до 255. Не надо путать это с типом данных byte из java, в этом типе данных числа представлены диапазоном [-128; 127], т.к. первый байт отвечает за знак числа. Ещё метод read может вернуть тебе значение -1, что будет означать, что достигнут конец потока (файла).
Проще говоря, метод read() читай байт за байтом и возвращает в виде числа [0; 255] и после окончания потока вернёт -1. Собственно, поэтому этот метод и называется побайтовым чтением. Твоя задача считать весь файл байт за байтом и посчитать, какой из них сколько раз встретился. Самые редкие вывести на экран, и всё.
0
Anonymous #3525583
5 мая 2025, 14:38
Ага. Значит надо вставлять числа, которые возвращает read() в коллекцию, перебирать и считать сколько раз повторяется. Понял, спасибо.
0