//He who hates me, hates my Father also. (John 15:23)
package com.javarush.task.task16.task1607;
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 horses = prepareHorsesAndStart();
while (calculateHorsesFinished(horses) != countHorses) {
}
}
public static int calculateHorsesFinished(List horses) throws InterruptedException {
int countFinished = 0;
//add your implementation here - Ð´Ð¾Ð±Ð°Ð²Ñ ÑÐ²Ð¾Ñ ÑеалзаÑÐ¸Ñ ÑÑÑ
for (Horse horse : horses) {
if (horse.isFinished())
countFinished += 1;
else {
System.out.println("Waiting for "+horse.getName());
horse.join();
}
}
return countFinished;
}
public static List prepareHorsesAndStart() {
List horses = new ArrayList(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;
}
public static class Horse extends Thread {
private boolean isFinished;
public Horse(String name) {
super(name);
}
public boolean isFinished() {
return isFinished;
}
public void run() {
String s = "";
for (int i = 0; i < 1001; i++) { //delay
s += "" + i;
if (i == 1000) {
s = " has finished the race!";
System.out.println(getName() + s);
isFinished = true;
}
}
}
}
}
/*
Horse Racing
РазбеÑиÑÑ, ÑÑо Ð´ÐµÐ»Ð°ÐµÑ Ð¿ÑогÑамма.
РеализÑй меÑод calculateHorsesFinished.
Ðн должен:
1. ÐоÑÑиÑаÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво ÑиниÑиÑовавÑиÑ
лоÑадей и возвÑаÑиÑÑ ÐµÐ³Ð¾. ÐÑполÑзÑй меÑод isFinished().
2. ÐÑли лоÑÐ°Ð´Ñ ÐµÑе не пÑиÑла к ÑиниÑÑ (!isFinished()), Ñо:
2.1. ÐÑвеÑÑи в конÑÐ¾Ð»Ñ Â«Waiting for » + horse.getName().
2.2. ÐодождаÑÑ, пока она завеÑÑÐ¸Ñ Ð³Ð¾Ð½ÐºÑ. ÐодÑмай, какой меÑод нÑжно иÑполÑзоваÑÑ Ð´Ð»Ñ ÑÑого.
ТÑебованиÑ:
1.âÐеÑод calculateHorsesFinished должен веÑнÑÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво ÑиниÑиÑовавÑиÑ
лоÑадей.
2.âÐеÑод calculateHorsesFinished должен вÑзÑваÑÑ Ð¼ÐµÑод isFinished Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ лоÑади из пеÑеданного ÑпиÑка.
3.âÐÑли какаÑ-либо из пеÑеданнÑÑ
в ÑпиÑке лоÑадей еÑе не ÑиниÑиÑовала, меÑод calculateHorsesFinished должен вÑвеÑÑи в конÑÐ¾Ð»Ñ "Waiting for " + horse.getName(). ÐÑÐ¸Ð¼ÐµÑ ÑообÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¿ÐµÑвой лоÑади: "Waiting for Horse_01".
4.âÐÑли какаÑ-либо из пеÑеданнÑÑ
в ÑпиÑке лоÑадей еÑе не ÑиниÑиÑовала, меÑод calculateHorsesFinished должен подождаÑÑ Ð¿Ð¾ÐºÐ° она ÑиниÑиÑÑеÑ. ÐÑполÑзÑй пÑавилÑнÑй меÑод Ð´Ð»Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ.
5.âÐоÑле завеÑÑÐµÐ½Ð¸Ñ ÑабоÑÑ Ð¿ÑогÑаммÑ, конÑÐ¾Ð»Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° ÑодеÑжаÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ Ñом, ÑÑо вÑе лоÑади ÑиниÑиÑовали. ÐÑÐ¸Ð¼ÐµÑ ÑообÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¿ÐµÑвой лоÑади: "Horse_01 has finished the race!".
package com.javarush.task.task16.task1607;
import java.util.ArrayList;
import java.util.List;
/*
Horse Racing
*/
public class Solution {
public static int countHorses = 10;
public static void main(String[] args) throws InterruptedException {
List horses = prepareHorsesAndStart();
while (calculateHorsesFinished(horses) != countHorses) {
}
}
public static int calculateHorsesFinished(List horses) throws InterruptedException {
int countFinished = 0;
//add your implementation here - Ð´Ð¾Ð±Ð°Ð²Ñ ÑÐ²Ð¾Ñ ÑеалзаÑÐ¸Ñ ÑÑÑ
return countFinished;
}
public static List prepareHorsesAndStart() {
List horses = new ArrayList(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;
}
public static class Horse extends Thread {
private boolean isFinished;
public Horse(String name) {
super(name);
}
public boolean isFinished() {
return isFinished;
}
public void run() {
String s = "";
for (int i = 0; i < 1001; i++) { //delay
s += "" + i;
if (i == 1000) {
s = " has finished the race!";
System.out.println(getName() + s);
isFinished = true;
}
}
}
}
}
*/