Не я догадываюсь что мой код может где то и гавно)) но все же
мои рассуждения задача по потоками где то мы стартуем много потоков ищу где
for (int i = 0; i < horseCount; i++) {
horses.get(i).start();
}
стартуем мы их тут )))
отлично теперь ищу что место где лошадь финиширует и пытаюсь понять что там
Вот тут кажется она финиширует
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;
}
}
}
и isFinished должна стать true
отлично то есть horses.get(0).isFinished станет true лошадь финишировала
теперь есть с чем сравнивать
if ((horses.get(0).isFinished))
теперь думаем что бы вывалится из цикла который нас сюда заганяет
while (calculateHorsesFinished(horses) != horses.size()) {
}
вот вылезем только тогда когда calculateHorsesFinished(horses) будет равено 10
то есть мы узнаем что лошадь финишировала и к finishedCoun прибавляем один
{horses.get(0).stop(); finishedCount++;}
в самом начале метода calculateHorsesFinished мы обнуляем finishedCount
потом пробегаемся по всем if ((horses.get(1).isFinished)) и если не true то пишем что лошадь еще не пришла
выдем из цикла только в том случаи если все лошади пришли
ну что то задача не валидаторится вроде все лошади пришли я контролировал движение лошадей
package com.javarush.task.task16.task1607;
import java.util.ArrayList;
import java.util.List;
/*
Horse Racing
*/
public class Solution {
public static void main(String[] args) throws InterruptedException {
List<Horse> horses = prepareHorsesAndStart(10);
while (calculateHorsesFinished(horses) != horses.size()) {
}
}
public static int calculateHorsesFinished(List<Horse> horses) throws InterruptedException {
int finishedCount = 0;
if ((horses.get(0).isFinished)) {horses.get(0).stop(); finishedCount++;} else {System.out.println( "Waiting for " + horses.get(0).getName()); }
if ((horses.get(1).isFinished)){ horses.get(1).stop();finishedCount++; } else {System.out.println( "Waiting for " + horses.get(1).getName()); }
if ((horses.get(2).isFinished)){ horses.get(2).stop();finishedCount++; }else {System.out.println( "Waiting for " + horses.get(2).getName()); }
if ((horses.get(3).isFinished)){ horses.get(3).stop();finishedCount++; }else {System.out.println( "Waiting for " + horses.get(3).getName()); }
if ((horses.get(4).isFinished)){ horses.get(4).stop();finishedCount++; }else {System.out.println( "Waiting for " + horses.get(4).getName()); }
if ((horses.get(5).isFinished)){ horses.get(5).stop();finishedCount++; }else {System.out.println( "Waiting for " + horses.get(5).getName()); }
if ((horses.get(6).isFinished)){ horses.get(6).stop();finishedCount++; }else {System.out.println( "Waiting for " + horses.get(6).getName()); }
if ((horses.get(7).isFinished)) {horses.get(7).stop();finishedCount++; }else {System.out.println( "Waiting for " + horses.get(7).getName()); }
if ((horses.get(8).isFinished)){ horses.get(8).stop();finishedCount++; }else {System.out.println( "Waiting for " + horses.get(8).getName()); }
if ((horses.get(9).isFinished)) {horses.get(9).stop();finishedCount++; }else {System.out.println( "Waiting for " + horses.get(9).getName()); }
return finishedCount;
}
public static List<Horse> prepareHorsesAndStart(int horseCount) {
List<Horse> horses = new ArrayList<>(horseCount);
String number;
for (int i = 1; i < horseCount + 1; i++) {
number = i < 10 ? ("0" + i) : "" + i;
horses.add(new Horse("Horse_" + number));
}
for (int i = 0; i < horseCount; 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;
}
}
}
}
}