Максимальный байт

  • 10
  • Недоступна
Ввести с консоли имя файла. Найти максимальный байт в файле, вывести его на экран. Закрыть поток ввода-вывода.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (151)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Lua gato
Уровень 20
20 июля, 22:18
У FileInputStream есть readAllBytes(), но 😱:
Ошибка в файле com/javarush/task/task18/task1801/Solution.java в строке :  12
Не найден метод "readAllBytes()"
Пришлось как в решении, читать по одному 😵
Lyokha Blagodatskikh
Уровень 29, Ural, Russian Federation
14 июля, 10:23
Продолжаем марафон длинных, сложно-читаемых строк ) try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); FileInputStream fis = new FileInputStream(reader.readLine())) {
Ivasishinav
Уровень 29, Минск, Беларусь
18 июля, 10:06
Присоединюсь =)
BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(new Scanner(System.in).nextLine()));
Виктор
Уровень 20, Бобруйск, Беларусь
26 апреля, 11:01
Collections.sort(list, Collections.reverseOrder());
Сонмониус
Уровень 39, Харьков, Ukraine
12 июня, 11:01
можно, но мне кажется это из ряда "забивать гвозди микроскопом". Не очень оптимально с точки зрения памяти. При таком решении все считанное нужно сохранить в массив - а файл может быть большой. Если же перебирать как в правильном решении, то одновременно храниться только максимальный байт. Все ненужное отбрасывается сразу.
RedFuelTank
Уровень 38
13 июня, 22:00
Это уже из продвинутого разряда, но сортировка всегда будет более затратная в ресурсах, чем просто проход по списку. Так ты ещё тут сохраняешь весь список в переменную
Виктор
Уровень 20, Бобруйск, Беларусь
26 апреля, 10:58
В правильном решении BufferedReader не закрыли.
PavelFatBoy
Уровень 32, Russian Federation
6 июля, 10:50
в правильном решении try with resourses используется, он и закрывает открытые потоки, достаточно закрыть один, закроются все
Виктор
Уровень 20, Бобруйск, Беларусь
7 июля, 05:34
Но он же не в блоке try(...)
PavelFatBoy
Уровень 32, Russian Federation
8 июля, 15:30
так вот, я и читал здесь где-то, достаточно закрыть один из цепочки(вроде последний, тут его и закрываем в try), остальные автоматом закроются, я могу ошибаться, но вроде так, кто шарит лучше, поправьте😁
Timankov Работает в Commercial photograp
23 марта, 07:26
как же круто, когда можно решить одну и ту же задачу разными способами! через стримы и трисет вышло красивее!)
Никита
Уровень 28, Минск, Belarus
11 января, 10:46
самое прикольное то, что вызов массива byte[] bytes = inputStream.readAllBytes(); - не выйдет. ругается на стороне сервера! 20 попыток на этом съел пока не решение альтернативным способом
milyasow
Уровень 30, Москва, Russian Federation
31 мая, 19:22
Та же ботва. Первый раз такое вижу на JR.
Сонмониус
Уровень 39, Харьков, Ukraine
12 июня, 11:06
может из-за того, что решили что такой способ сильно затратный. Нужно найти только максимальный байт из файла, а в решении через byte[] bytes = inputStream.readAllBytes(); нужно сохранить весь массив - то бишь выделить в памяти участок размером с сам файл, вместо хранения одного инта как в предложенном решении.
milyasow
Уровень 30, Москва, Russian Federation
12 июня, 16:36
Нет. Это связано с версией Java на сервере.
String version = System.getProperty("java.version");   //  1.8.0_201
InputStream.readAllBytes() method was introduced in Java 9. public byte[] readAllBytes​() Since: 9
Сонмониус
Уровень 39, Харьков, Ukraine
12 июня, 17:08
Понял
Вадим
Уровень 22, Россия
2 января, 22:13
Переменную для хранения максимального байта max можно инициализировать Integer.MIN_VALUE - любое считанное из файла значение будет больше. Аналогично min = Integer.MAX_VALUE для следующей задачи
Павел оператор в ОАО "Мозырский НПЗ"
16 декабря 2021, 21:01
Не согласен с правильным решение от разработчиков. Ведь если с клавиатуры ввести имя пустого файла, то и максимальный байт будет пустым, т.е. -1, а не 0. А если в предложенное решение подкинуть пустой файл, то ответом будет 0, а это, в свою очередь будет ошибочно приводить к выводу, что в файле присутствует символ "0", хотя его там нет.
Mark
Уровень 19, Москва, Россия
17 декабря 2021, 15:47
В целом согласен, только максимальный байт будет не -1, а просто пустым, т.е. sout ничего не выведет.
Sasha Dokuchaev Работает в Andersen
29 декабря 2021, 14:47
ооо привет мозырским🖖
🟡ampersand
Уровень 36, Russian Federation
19 июня, 13:37
символ "0" не соответствует байту 0. файл далеко не всегда содержит данные в формате текстовых кодировок.
Zuzu
Уровень 25, Польша
19 ноября 2021, 00:58
А кто может объяснить 2 непонятных вещи. Первая - почему если в файле всего один символ то при записи его в переменную целочисленного типа всегда будет -1? Второе - я использовал условие int i = 0; if (i > reader.read() ) i = reader.read(). В переменную i равную нулю записывается число -1, выходит что оно больше нуля?
Павел оператор в ОАО "Мозырский НПЗ"
16 декабря 2021, 20:40
Наверное Вы уже разобрались, но если нет, то число "-1" выводится в том случае, если очередной байт файла пуст (ничего не содержит, даже нуля там нет). Как я понял, Вы использовали файл с одним символом и при этом в коде дважды использовали reader.read(). При первом использовании метода read() - "if (i > reader.read() )" вы сравнили этот байт со своим i =0, проверка прошла успешно и тогда вы использовали метод read() второй раз в операции присвоения "i = reader.read()", но при этом использовался уже следующий байт из вашего файла, а так как в файле только один символ, то следующий байт оказался пустым и поэтому reader.read() вернул вам "-1" и переменной "i" была присвоена эта минус единица.
marych
Уровень 30, Russian Federation
4 мая, 13:09
Спасибо, помогло.
Sergey Kornilov
Уровень 39, Petropavlovsk, Казахстан
8 ноября 2021, 07:31
Всего эту задачу решили 25754 учеников. Использовал для сравнения тернарное выражение : bb =bb >temp ? bb : temp;