JavaRush
AI Academy
new
Акция
Университет
Java FullStack
Python FullStack
AI Native Developer
new
Web FullStack
Обучение
Курсы
Задачи
Опросы
Игры
Помощь
График пинков
Стажировка
Сообщество
Пользователи
Форум
Чат
Статьи
Истории успеха
Активности
Отзывы
Подписки
Светлая тема
Вопрос
  • Отзывы
  • О нас
  • CS50
Начать
Начать обучение
Начать обучение
  • Все вопросы
JavaRush/Помощь по Java задачам/Помогите разобраться, думаю Валидатор не прав...
Aleksei Ilin
36 уровень
  • 27.07.2019
  • 482просмотров
  • 3комментариев

Помогите разобраться, думаю Валидатор не прав...

Вопрос по задаче Поиграем?
Java Core,  6 уровень,  13 лекция
Решен

Три человека играют в игру. Каждый игрок(Gamer) характеризуется двумя параметрами: фамилией(name) и количеством действий в секунду (rating).
Нужно вывести в консоль ход игры и определить победителя и проигравших.
Итак...
1. Разберись, что делает программа.
1.1. List<String> steps хранит последовательность действий, которое каждый игрок выполняет от 0 до последнего.
1.2. isWinnerFound показывает, найден победитель или нет.
1.3. Метод sleep выбрасывает InterruptedException и принимает параметр типа long.
1.4. Игроки играют независимо друг от друга.
2. Реализуй логику метода run так, чтобы для каждого игрока:
2.1. Через равные интервалы времени (1000ms / rating) выводились в консоль действия, описанные в steps.
2.2. Любой текст должен начинаться с фамилии игрока (метод getName()), потом следовать двоеточие, а затем сам текст.

Пример:
Ivanov:Начало игры

2.3. Когда игрок выполнит все действия из steps, то он считается победителем. Выведи getName() + ":победитель!"
2.4. Когда найден победитель, то игра останавливается, и остальные игроки считаются побежденными. Выведи для них getName() + ":проиграл"

Требования:
  • Метод run класса Gamer через равные интервалы времени (1000ms / rating) должен выводить в консоль фамилию игрока (метод getName()), потом двоеточие, а затем текст из OnlineGame.steps. Пример: Ivanov:Начало игры
  • Когда все игровые шаги будут выполнены, а победитель еще не найден, метод run должен установить флаг OnlineGame.isWinnerFound в true (сообщить остальным, что он победитель).
  • Если игрок стал победителем, его метод run должен вывести надпись getName() + ":победитель!". Например: Sidorov:победитель!
  • Методы run всех игроков которые не стали победителями (были прерваны), должны вывести надписи getName() + ":проиграл". Например: Petrov:проиграл
  • Метод run не должен кидать исключение при прерывании.
....
package com.javarush.task.task16.task1627; import java.util.ArrayList; import java.util.List; public class Solution { public static void main(String[] args) throws InterruptedException { OnlineGame onlineGame = new OnlineGame(); onlineGame.start(); } public static class OnlineGame extends Thread { public static volatile boolean isWinnerFound = false; public static List<String> steps = new ArrayList<String>(); static { steps.add("Начало игры"); steps.add("Сбор ресурсов"); steps.add("Рост экономики"); steps.add("Убийство врагов"); } protected Gamer gamer1 = new Gamer("Ivanov", 3); protected Gamer gamer2 = new Gamer("Petrov", 1); protected Gamer gamer3 = new Gamer("Sidorov", 5); public void run() { gamer1.start(); gamer2.start(); gamer3.start(); while (!isWinnerFound) { } gamer1.interrupt(); gamer2.interrupt(); gamer3.interrupt(); } } public static class Gamer extends Thread { private int rating; public Gamer(String name, int rating) { super(name); this.rating = rating; } @Override public void run() { //Add your code here - добавь код тут try { for (int numStep = 0; numStep < OnlineGame.steps.size();numStep++) { if (OnlineGame.isWinnerFound){ System.out.println(getName() + ":проиграл"); return; } else if (numStep == OnlineGame.steps.size()-1) { System.out.println(getName() + ":победитель!"); OnlineGame.isWinnerFound = true; } else System.out.println(getName() + ":" + OnlineGame.steps.get(numStep)); } Thread.sleep(1000 / this.rating); } catch (InterruptedException e) { //System.out.println(getName() + ":проиграл"); } } } }
0
Комментарии (3)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Nikki
Уровень 1
29 июля 2019, 17:18
У меня с этим кодом не получился такой же вывод. Судя по этому коду возникли вопросы: Почему sleep после цикла? Почему вывод про Победителя находится в цикле? Когда кто-то выиграл, игра останавливается
gamer1.interrupt();
gamer2.interrupt();
gamer3.interrupt();
но не выводится кто проиграл.
0
IceBerg
Уровень 41
Master
27 июля 2019, 17:50
Петров пацифист что ли?) Где "Убийство врагов"?
0
Aleksei IlinSoftware Developer в Axelot
27 июля 2019, 18:40
Да, действительно. Спасибо! но дальше опять тупик...
0
Обучение
  • Курсы программирования
  • Регистрация
  • Курс Java
  • Помощь по задачам
  • Цены
Сообщество
  • Пользователи
  • Статьи
  • Форум
  • Чат
  • Истории успеха
  • Активности
Компания
  • О нас
  • Контакты
  • Отзывы
  • FAQ
  • Поддержка
JavaRushJavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.
Подписывайтесь
Язык интерфейса
Русский
English Українська
"Программистами не рождаются" © 2026 JavaRush
MastercardVisa
"Программистами не рождаются" © 2026 JavaRush