Ich dachte erst es liegt vielleicht an der Sprache, aber auch mit der Ausgabe "Warten auf Pferd_01" schlägt die Verifizierung fehl... wo liegt mein Fehler?
package de.codegym.task.task16.task1607;
import java.util.ArrayList;
import java.util.List;
/*
Pferderennen
*/
public class Solution {
public static void main(String[] args) throws InterruptedException {
List<Horse> horses = prepareHorsesAndStart(10);
while (calculateHorsesFinished(horses) != horses.size()) {
}
}
/*
1. Die Anzahl der Pferde berechnen und zurückgeben, die das Rennen beendet haben. Verwende die Methode isFinished().
2. Wenn ein Pferd noch nicht die Ziellinie überquert hat (!IsFinished()), dann:
2.1. Zeige "Warten auf " + horse.getName().
2.2. Warte, bis das Pferd das Rennen beendet hat. Überlege dir, welche Methode du dazu verwenden musst.
2.3. Behandle ein solches Pferd nicht so, als hätte es das Rennen schon beendet.
*/
public static int calculateHorsesFinished(List<Horse> horses) throws InterruptedException {
int finishedCount = 0;
//schreib hier deinen Code
for (int i = 0; i < horses.size(); i++) {
if (!horses.get(i).isFinished()) {
System.out.println("Warten auf " + horses.get(i).getName());
horses.get(i).join();
}
if (horses.get(i).isFinished()) {
finishedCount++;
}
}
System.out.println(finishedCount);
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++) { // Verzögerung
s += "" + i;
if (i == 1000) {
s = " hat das Rennen beendet!";
System.out.println(getName() + s);
isFinished = true;
}
}
}
}
}