JavaRush
Акция
Университет
Java FullStack
Python FullStack
new
Web FullStack
new
Обучение
Курсы
Задачи
Опросы
Игры
Помощь
График пинков
Стажировка
Сообщество
Пользователи
Форум
Чат
Статьи
Истории успеха
Активности
Отзывы
Подписки
Светлая тема
Вопрос
  • Отзывы
  • О нас
  • CS50
Начать
Начать обучение
Начать обучение
  • Все вопросы
JavaRush/Помощь по Java задачам/три дня бьюсь , не могу понять что не ТАК?
Антон Никифоров
29 уровень
  • 05.07.2022
  • 394просмотров
  • 8комментариев

три дня бьюсь , не могу понять что не ТАК?

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


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

Требования:
  • Программа должна считывать имя файла с консоли.
  • Для чтения из файла используй поток FileInputStream.
  • В консоль через пробел должны выводиться все байты из файла с максимальным количеством повторов.
  • Данные в консоль должны выводится в одну строку.
  • Поток чтения из файла должен быть закрыт.
package com.javarush.task.task18.task1803; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import static java.util.Collection.*; // C:/3.txt 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); ArrayList<Integer> list = new ArrayList(); while (fileInputStream.available()>0){ //заполняем лист данными из файла int ci= fileInputStream.read(); list.add(ci); } Collections.sort(list); ArrayList<Integer> list2 = new ArrayList(); ArrayList<Integer> list1 = new ArrayList(); int max; int count; for (int i = 0; i < list.size() - 1; i++) { max = 1; count = 1; for (int j = i + 1; j < list.size(); j++) { if (list.get(i).equals(list.get(j))) { //проверяем если певое число и второе равны max++; //увеличиваем максимум и добовляем в новый лист list1.add(list.get(j)); } else if (max == count) {continue; // проверяем если числа не равны проверяем максимум } else if (list.get(i).equals(list.get(j - 1))) { list1.add(list.get(i)); } } if (list1.size()>=list2.size()){ list1.addAll(list2); list1.clear(); } else list1.clear(); } for (int a:list2) { System.out.println(a); ///12224444 } } }
0
Комментарии (8)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Антон Никифоров
Уровень 29
5 июля 2022, 18:04
выдает такую ошибку Не нужно несколько раз выводить один и тот же байт.
0
🟡ampersand
Уровень 36
5 июля 2022, 19:25
у тебя в файле есть один байт с максимальным количеством повторений == 5 значит тебе в консоль нужно вывести этот байт. один раз если будет файл с данными "tyyykooo", тогда тебе нужно будет вывести 2 байта через пробел (которые соответствуют символам 'y' и 'o'). здесь максимальное количество повторений == 3.
0
🟡ampersand
Уровень 36
6 июля 2022, 08:37
кстати, удобно хранить парами. байт - количество повторений. если решаешь через коллекции хорошо подойдет ассоциативный список (HashMap).
0
Антон Никифоров
Уровень 29
5 июля 2022, 18:02
что опять не так??? // в файле вот такие даннные(tyyykooooo) выдод такой вроде правильно: 111 111 111 111 111 где ошибка понять не могу понять? // C:/3.txt 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); ArrayList<Integer> list = new ArrayList(); while (fileInputStream.available()>0){ //заполняем лист данными из файла int ci= fileInputStream.read(); list.add(ci); } fileInputStream.close(); Collections.sort(list); ArrayList<Integer> list2 = new ArrayList(); ArrayList<Integer> list1 = new ArrayList(); int max; int count; for (int i = 0; i < list.size() - 1; i++) { max = 1; count = 1; for (int j = i + 1; j < list.size(); j++) { if (list.get(i).equals(list.get(j))) { //проверяем если певое число и второе равны max++; //увеличиваем максимум и добовляем в новый лист list1.add(list.get(j)); } else if (max == count) {continue; // проверяем если числа не равны проверяем максимум } else if (list.get(i).equals(list.get(j - 1))) { list1.add(list.get(i)); } } if (list1.size()>=list2.size()){ list2.addAll(list1); list1.clear(); } else list1.clear(); } for (int a:list2) { System.out.print(a+" "); ///12224444 } reader.close(); } }
0
Антон Никифоров
Уровень 29
5 июля 2022, 17:49
спасибо, главную ошибку нашел. А я 10 раз смотрел на код и не мог понять что не так. Я пустой лист добовлял в полный list1.addAll(list2); , а надо было наоборот😀 list2.addAll(list1); еще раз спасибо
0
Антон Никифоров
Уровень 29
5 июля 2022, 13:37
извиняюсь , это можно стереть, на этом примере я логику программы разбирал. Все верно list1, list2 изначально пустые , но потом после отсортировки list-а , заполняется совпадениями list1 , потом копирует все в list2, а потом если повторений больше то копирует в list2, если нет то просто обнуляет list1, увеличивает i++; и переходит к очередному циклу.
0
🟡ampersand
Уровень 36
5 июля 2022, 14:18
я чтоб по-быстрому глянуть что и как просто поставил breakpoint на 49 строке и списки пустые. а где ты вообще в list2 добавляешь значения? ты пробовал тест прогонять какой-нибудь, какой у тебя вывод? подозреваю, что никакого )...
0
🟡ampersand
Уровень 36
5 июля 2022, 11:15
Подскажи что значит вывод у тебя? ///12224444 Сейчас прогнал код на своем файле - у меня пустые list1, list2 и вывод соотв. тоже
0
Обучение
  • Курсы программирования
  • Регистрация
  • Курс Java
  • Помощь по задачам
  • Цены
Сообщество
  • Пользователи
  • Статьи
  • Форум
  • Чат
  • Истории успеха
  • Активности
Компания
  • О нас
  • Контакты
  • Отзывы
  • FAQ
  • Поддержка
JavaRushJavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.
Подписывайтесь
Язык интерфейса
Русский
English Українська
"Программистами не рождаются" © 2025 JavaRush
MastercardVisa
"Программистами не рождаются" © 2025 JavaRush