Самые редкие байты

  • 10
Ввести с консоли имя файла. Найти байт или байты с минимальным количеством повторов. Вывести их на экран через пробел. Закрыть поток ввода-вывода.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (207)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Дмитрий Сысоев
Уровень 18, Россия
15 июня, 10:00
Хотите я вас прокачу на своем велосипеде с квадратными колесами?
Blame
Уровень 26, Омск, Россия
16 мая, 05:55
Можно сделать без создания Листа. Перебрать массив при помощи fori и выводить только те i, у которых массив[i] == минимальномуКоличествуПовторов
Денисян
Уровень 27, Калининград, Россия
15 мая, 18:37
Товарищи господа, объясните, почему в правильном решении в строке 29 добавляется в массив именно i if (byteCountArray[i] == minCount) resultList.add(i); Вот хоть убей не втыкаю. Или киньте ссылкой, где можно почитать. Спасибо
Oleksii
Уровень 30, Харьков
20 мая, 20:23
Весь вопрос в том, как мы создаем byteCountArray. Это массив с индексом и значением int в ячейке. Индекс соответствует одному из всех возможных 256 bytes (0-255). А в ячейки массива мы плюсовали (+1 каждый раз), когда из "байтопровода" прилетал именно этот байт (именно этот уникальный байт (от 0 до 255). Поэтому в byteCountArray в индексе (i) хранятся значения, из которых мы по условию задачи должны найти минимальные (самые редкие) байты, прилетевшие по байтопроводу. Поэтому, когда мы помещаем i в add(i) мы добавляем в ЭррейЛист, который будем распечатывать, имено те байты, которых было меньше всего. ***Для меня остается открытым такой вопрос. Как диапазон для byte из (-128 ...0...127) превратился в (0...255). Это ведь не одно и то же. Самое лучшее, что нашел: https://javarush.ru/groups/posts/1468-pobaytovaja-rabota-s-faylami?post=full#discussion комментарий автора статьи от 19 февраля 2016, 22:38. Сейчас объясняю себе так правильное решение задачи от автора: в битовом представлении именно в JAVA первая из 8 цифр играет функцию знака. За пределами JAVA такого нет. И поэтому (возможно!) битовое представление (в нулях и единицах) одних и тех же очередностий из 8 единиц и нулей: в битовой математике будет (0-255), а в JAVA - (-128 ... 0 ... 127). Я прав?
Oleksii
Уровень 30, Харьков
21 мая, 12:32
Завершу гештальт. Получил такой ответ от Андрей, Уровень 11, Москва, Россия: Метод read класса FileInputStream возвращает не byte, а int. Соответственно знаковый бит у byte - это просто 8-й бит у int, не знаковый. Поэтому диапазон 10000000 ... 11111111 для int - это всегда положительные числа 128...255, а не -128...-1 как у byte.
Денисян
Уровень 27, Калининград, Россия
22 мая, 17:10
спасибо, я как только разместил вопрос, сразу же понял, как это работает. Но пусть останется для разъяснения.
Nick
Уровень 20
29 апреля, 05:33
Зачем ставить две одинаковых задачи подряд?!
Михаил
Уровень 18, Санкт-Петербург
19 апреля, 11:43
Не зря я на своем деревянном велосипеде мапу сортировал в обратном порядке:))) И только прочитав комментарии узнал про Collections.frequency и Collections.min. Слезы брызнули так, что пол дня монитор мыл:(((( Методы Collections в доступном для обычных людей виде
Stokly QA Automation Engineer
22 апреля, 11:14
Если задание такое, что я не знаю вообще с чего начать, то первым делом читаю, что пишут в комментариях. Хоть какая-то мысль придет на основе написанного с какой стороны подступиться. Спасибо за наводку и твои слезы, хоть мне теперь не реветь и монитор не отмывать 😅
Korharot
Уровень 19, Москва, Россия
26 марта, 15:55
потратил 3 попытки на вывод количества вхождений начиная с 2, т.к. повтор, это когда байт встречается чаще 1 раза, т.е. > 1. Валя ожидает вывод тех байтов, которые встречаются хотя бы 1 раз, хотя по условию задачи это неверно. Можно решить задачу с помощью одного интового массива, однократного чтения всех байтов из файла и вложенных циклов.
Ikar108
Уровень 19, Санкт-Петербург, Россия
13 мая, 07:25
Чел, спасибо! 4 попытки убил пытаясь понять, что ему не нравиться в моём выводе, а там всего-то "Валя ожидает вывод тех байтов, которые встречаются хотя бы 1 раз")
ric ric
Уровень 25
22 марта, 13:45
ребята кайфаните с моего простого и элегантного решения которое не принял валя а потом гляньте че они там предложили как эталон
Владислав
Уровень 30, Уфа, Россия
29 марта, 17:01
if repeatCount==1, а если не?)
Дмитрий
Уровень 26, Москва
29 марта, 18:35
прости, но от такого решения кайфа больше
Сергей
Уровень 19
24 апреля, 03:29
прям как у меня списывал (шутка). Переменную min можно не заводить. И "==" очень желательно заменить на equals. хоть JVM и пропускает ругаясь.
Дмитрий
Уровень 26, Москва
25 апреля, 15:21
если не заводить она будет определяться для каждой entry. Не очень интересно так делать... equals использую для любых не integer, а для integer привык ==, но объяснить "зачем так делаю" не могу...
Макс
Уровень 18, Минск
19 июня, 20:01
извиняюсь за безграмотность, можно вкратце что происходит у тебя в цыклах(for)?
ric ric
Уровень 25
22 марта, 13:31
решил задачу, ну точнее она делает что надо только вот валидатор не знает метод с помощью которого я засунул все байты в массив байт
Дмитрий
Уровень 20
22 февраля, 18:15
В прошлой задаче вспомогательные статические коллекции с методами очень даже прокатили, а в этой Валера сказал, что нельзя пользоваться статическими полями, все было красиво по методам разложено, пришлось тупо свалить все в main, Валера одобрил такой нелегкий труд. Чему меня это научило? Обмани Валеру как только сможешь))
Anonymous #2297535
Уровень 22, Северодвинск, Россия
26 февраля, 13:47
Когда получил фейл из за статической переменной тоже негодовал.
Gaziz
Уровень 31, Уфа, Россия
18 февраля, 09:38
Понравилось подсказать нечего, тут мне пришлось действительно вникать.