package com.javarush.test.level16.lesson05.task02; import java.util.ArrayList; import java.util.List; /* Horse Racing Разберись, что делает программа. Реализуй метод calculateHorsesFinished. Он должен: 1. Посчитать количество финишировавших лошадей и возвратить его. Используй метод isFinished(). 2. Если лошадь еще не пришла к финишу (!isFinished()), то: 2.1. Вывести в консоль "Waiting for " + horse.getName(). 2.2. Подождать, пока она завершит гонку. Подумай, какой метод нужно использовать для этого. */ public class Solution { public static int countHorses = 10; public static void main(String[] args) throws InterruptedException { List<Horse> horses = prepareHorsesAndStart(); //1. Создание и запуск лошадей. while (calculateHorsesFinished(horses) != countHorses) { } } public static int calculateHorsesFinished(List<Horse> horses) throws InterruptedException { int countFinished = 0; //add your implementation here - добавь свою реалзацию тут for (int j = 0; j < countHorses; j++) { if (!horses.get(j).isFinished()) { System.out.println("Waiting for " + horses.get(j).getName()); horses.get(j).join(); countFinished++; } else countFinished++; } return countFinished; } public static class Horse extends Thread { public Horse(String name) { super(name); } private boolean isFinished; public boolean isFinished() { return isFinished; } public void run() { //2. Один для всех лошадей тред, который гоняет переменную до 1000, потом пишет, что лошадь пришла. String s = ""; for (int i = 0; i < 1001; i++) { //delay s += new String("" + i); if (i == 1000) { s = " has finished the race!"; System.out.println(getName() + s); isFinished = true; } } } } public static List<Horse> prepareHorsesAndStart() { //(1) List<Horse> horses = new ArrayList<Horse>(countHorses); String number; for (int i = 1; i < countHorses + 1; i++) { number = i < 10 ? ("0" + i) : "" + i; horses.add(new Horse("Horse_" + number)); } for (int i = 0; i < countHorses; i++) { horses.get(i).start(); } return horses; } }
Leave A Comment