JavaRush
Акция
Университет
Java FullStack
Python FullStack
AI Native Developer
new
Web FullStack
Обучение
Курсы
Задачи
Опросы
Игры
Помощь
График пинков
Стажировка
Сообщество
Пользователи
Форум
Чат
Статьи
Истории успеха
Активности
Отзывы
Подписки
Светлая тема
Вопрос
  • Отзывы
  • О нас
  • CS50
Начать
Начать обучение
Начать обучение
  • Все вопросы
JavaRush/Помощь по Java задачам/В чём проблема? Валидатор ругается, но всё работает.
Евгений Канищев
22 уровень
  • 31.03.2020
  • 386просмотров
  • 5комментариев

В чём проблема? Валидатор ругается, но всё работает.

Вопрос по задаче Кто первый встал - того и тапки
Java Core,  6 уровень,  13 лекция
Решен


1. Разберись, что делает программа.
1.1. Каждая нить должна читать с консоли строки. Используй готовый static BufferedReader reader.
1.2. Используй AtomicInteger readStringCount, чтобы посчитать, сколько строк уже считано с консоли всеми нитями.
2. Реализуй логику метода run:
2.1. Пока нить не прервана (!isInterrupted) читай с консоли строки и добавляй их в поле List<String> result.
2.2. Используй readStringCount для подсчета уже считанных с консоли строк.
2.3. Тело метода run нужно поместить в блок try-catch.

Требования:
  • Метод run должен работать пока нить не прервана (!isInterrupted).
  • Метод run НЕ должен создавать свои InputStreamReader-ы или BufferedReader-ы.
  • Метод run должен считывать строки из reader и добавлять их в список result.
  • Метод run должен после каждого считывания увеличивать счетчик прочитанных строк readStringCount на 1.
  • Программа должна выводить данные, считанные каждым потоком.
package com.javarush.task.task16.task1628; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; public class Solution { public static volatile AtomicInteger readStringCount = new AtomicInteger(1); public static volatile BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); public static void main(String[] args) throws IOException { //read count of strings int count = Integer.parseInt(reader.readLine()); //init threads ReaderThread consolReader1 = new ReaderThread(); ReaderThread consolReader2 = new ReaderThread(); ReaderThread consolReader3 = new ReaderThread(); consolReader1.start(); consolReader2.start(); consolReader3.start(); while (count > readStringCount.get()) { } consolReader1.interrupt(); consolReader2.interrupt(); consolReader3.interrupt(); System.out.println("#1:" + consolReader1); System.out.println("#2:" + consolReader2); System.out.println("#3:" + consolReader3); reader.close(); } public static class ReaderThread extends Thread { private List<String> result = new ArrayList<String>(); public void run() { //add your code here - добавьте код тут while (!isInterrupted()) { synchronized (reader) { try { if (reader.ready()) { String line = reader.readLine(); result.add(line); Solution.readStringCount.incrementAndGet(); } } catch (IOException e) { //e.printStackTrace(); } } } } @Override public String toString() { return result.toString(); } } }
0
Комментарии (5)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Евгений Канищев
Уровень 22
31 марта 2020, 15:31
Удалил блок synchronized - задачу принял.Спасибо! Алексей, Java N-IDE просто компилятор для Андроида?
0
Алексей
Уровень 22
31 марта 2020, 14:36
Я все задачи решаю в Java N-IDE, так вот там у меня эта задача не решалась ни как - тупо стояла на проверке reader.ready(), а в приложении JavaRush валидатор засчитал без synchronized(reader) - я про него на тот момент не знал.
0
Алексей
Уровень 22
31 марта 2020, 13:49
У меня работает без synchronized (reader) - единственное отличие, которое я вижу.
0
Евгений Канищев
Уровень 22
31 марта 2020, 13:28
Поправил на 0, но проблема осталась.
0
Алексей
Уровень 22
31 марта 2020, 13:19
new AtomicInteger(1);
0
Обучение
  • Курсы программирования
  • Регистрация
  • Курс Java
  • Помощь по задачам
  • Цены
Сообщество
  • Пользователи
  • Статьи
  • Форум
  • Чат
  • Истории успеха
  • Активности
Компания
  • О нас
  • Контакты
  • Отзывы
  • FAQ
  • Поддержка
JavaRushJavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.
Подписывайтесь
Язык интерфейса
Русский
English Українська
"Программистами не рождаются" © 2026 JavaRush
MastercardVisa
"Программистами не рождаются" © 2026 JavaRush