JavaRush
AI Academy
Акция
Университет
Java FullStack
Python FullStack
AI Native Developer
new
Web FullStack
Обучение
Курсы
Задачи
Опросы
Игры
Помощь
График пинков
Стажировка
Сообщество
Пользователи
Форум
Чат
Статьи
Истории успеха
Активности
Отзывы
Подписки
Светлая тема
Вопрос
  • Отзывы
  • О нас
  • CS50
Начать
Начать обучение
Начать обучение
  • Все вопросы
JavaRush/Помощь по Java задачам/подскажите плиз почему не выводит не экран, где ошибка?
Антон Никифоров
29 уровень
  • 15.11.2022
  • 328просмотров
  • 7комментариев

подскажите плиз почему не выводит не экран, где ошибка?

Вопрос по задаче Самые редкие байты
Java Core,  8 уровень,  3 лекция
Обсуждается


Ввести с консоли имя файла.
Найти байт или байты с минимальным количеством повторов.
Вывести их на экран через пробел.
Закрыть поток ввода-вывода.

Требования:
  • Программа должна считывать имя файла с консоли.
  • Для чтения из файла используй поток FileInputStream.
  • В консоль через пробел должны выводиться все байты из файла с минимальным количеством повторов.
  • Данные в консоль должны выводится в одну строку.
  • Поток чтения из файла должен быть закрыт.
....
package com.javarush.task.task18.task1804; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.InputStreamReader; import java.util.*; public class Solution { public static void main(String[] args) throws Exception { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String s = reader.readLine(); reader.close(); FileInputStream fileInputStream = new FileInputStream(s); //ìàññèâ îïðåäåëèëè byte[] list = new byte[256]; byte a; //çàíîñèì äàííûå â ìàññèâ while (fileInputStream.available() > 0) { a = (byte) fileInputStream.read(); list[a] += 1; }//îïðåäåëÿåì ãäå åñòü ïîâòîðÿþùèåñÿ áàéòû è çàíîñèì â list1 /* for (int x : list ) { System.out.print(x+" "); }*/ fileInputStream.close(); Map<Integer, Byte> list1 = new HashMap<Integer, Byte>(); // ArrayList<Byte> list1 = new ArrayList<>(); int min = 2; // 2 3 2 for (int i = 0; i < list.length; i++) { //25 26 27 if (list[i] < min) { continue; } else if (list[i] >= min) { list1.put(i, list[i]); } } // System.out.println(list1); /* for (int x : list1 ) { System.out.print(x+"- "); }*/ ////îïðåäåëÿåì íàèáîëåå ðåäêî âñòðå÷àþùèåñÿ è çàíîñèì â ëèñò2 ArrayList<Byte> list2 = new ArrayList<>(); int min1 = 256; Iterator<Map.Entry<Integer, Byte>> iterator = list1.entrySet().iterator(); while (iterator.hasNext()){ Map.Entry<Integer, Byte> pair = iterator.next(); Integer key = pair.getKey(); //êëþ÷ Byte value = pair.getValue(); if (key < min) { min1 = key; list2.clear(); list2.add(value); } else if (key > min1) { continue; } else if (key == min1) { list2.add(value); } } /* list2.add(list1.get(0)); for (byte i = 1; i < list1.size(); i++) { if (list1.get(i) < min1) { min1 = list1.get(i); list2.clear(); // 322561 list2.add(list1.get(i)); } else if (list1.get(i) > min1) { continue; } else if (list1.get(i) == min1) { list2.add(i); } }// âûâîäèì íà*/ for (int x : list2 ) { System.out.print(x + " "); } fileInputStream.close(); } }
0
Комментарии (7)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
KIRAРазработчик в prosv.ruExpert
15 ноября 2022, 11:38
Тут очень много вопросов. 1. Не надо называть все листами. У вас массив - лист, карта - лист, лист - лист ? 2. a = (byte) fileInputStream.read(); list[a] += 1; Из за приведения к byte может произойти переполнение и вы обратитесь к отрицательному индексу. 3. int min = 2; Откуда взялась цифра 2? 4. Map<Integer, Byte> list1 = new HashMap<Integer, Byte>(); list1.put(i, list[i] - а если кол-во этого байта больше 127?); Вам не нужно перекладывать байты из массива в мап, чтобы переложить их в список. Найдите минимальное значение в массиве и выведите все байты у кого совпадает минимальное кол-во, все остальное лишнее
0
Антон Никифоров
Уровень 29
15 ноября 2022, 14:01
спасибо сейчас попробую!!
0
Антон Никифоров
Уровень 29
18 ноября 2022, 09:06
не могу понять почему у меня затык на этой задаче , более сложную выше сделал. А тут просто какаето Ж. В итоге посмотрел правильное решение и не могу понять? int[] byteCountArray = new int[256]; try (FileInputStream fileInputStream = new FileInputStream(fileName)) { while (fileInputStream.available() > 0) { byteCountArray[fileInputStream.read()] += 1; этим действием мы заполняем массив (т.е [0,0,1,2,1,5,4]-это количество одинаковых байт) т.е цифра 0-означает что такого байта или таких байт не было. цифра 1-означает что такого байта или таких байт , повторов не было и встретился только единожды. по int minCount = Integer.MAX_VALUE; for (int byteCount : byteCountArray) { if (byteCount > 0 && byteCount < minCount) minCount = byteCount; Почему минимальное значение должно быть больше 0, а не больше 1 ?????
0
KIRAРазработчик в prosv.ruExpert
18 ноября 2022, 09:10
По заданию надо найти байт который меньше всего встречался в файле
0
Антон Никифоров
Уровень 29
18 ноября 2022, 13:38
KIRA извини за настойчивость , я что то туплю сильно !!! В задаче же написано Найти байт или байты с минимальным количеством повторов., т.е. повтор должен быть обязателен!!! Или я не правильно понял задачу?
0
KIRAРазработчик в prosv.ruExpert
18 ноября 2022, 14:37
Тут не удачно выбрали формулировку. Нужно найти байт или байты с минимальной встречаемостью.
0
Антон Никифоров
Уровень 29
18 ноября 2022, 17:46
СПАСИБО ОГРОМНОЕ!!!
0
Обучение
  • Курсы программирования
  • Регистрация
  • Курс Java
  • Помощь по задачам
  • Цены
Сообщество
  • Пользователи
  • Статьи
  • Форум
  • Чат
  • Истории успеха
  • Активности
Компания
  • О нас
  • Контакты
  • Отзывы
  • FAQ
  • Поддержка
JavaRushJavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.
Подписывайтесь
Язык интерфейса
Русский
English Українська
"Программистами не рождаются" © 2026 JavaRush
MastercardVisa
"Программистами не рождаются" © 2026 JavaRush