Уже дня три смотрю на задачу как баран на новые ворота, а решение даже в голову не идет.
Смотрел видео по Runable и Thread, по видео все понятно в реальности сделать ничего не могу.
Понимания кода нет сколько не пытаюсь разобраться не понимаю.
Из за того что не могу нормально прочитать код не могу составить решение.
Начинаю волноваться что я немного тупой уже лезут мысли в голову что java не осилю.
Помогите кто чем может. Понимаю что на этой теме начинаю сыпаться.
Я закоментирую что понимаю что не понимаю пропущу.
Условие Задачи:
Horse Racing
Разберись, что делает программа.
Реализуй метод calculateHorsesFinished.
Он должен:
1. Посчитать количество финишировавших лошадей и возвратить его. Используй метод isFinished().
2. Если лошадь еще не пришла к финишу (!isFinished()), то:
2.1. Вывести в консоль "Waiting for " + horse.getName().
2.2. Подождать, пока она завершит гонку. Подумай, какой метод нужно использовать для этого.
2.3. Не считать такую лошадь финишировавшей.
Требования:
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 void main(String[] args) throws InterruptedException {
List<Horse> horses = prepareHorsesAndStart(10); // 1. создали лист и идем в п. 2 что бы узнать что помещаем и передаем в него 10
// 19. В итоге Хр"н пойми что мы сюда добавили после стольких кругов. далее п.20
while (calculateHorsesFinished(horses) != horses.size()) { // 20.Пока не будет равен размеру лошадей далее п.21
}
}
public static int calculateHorsesFinished(List<Horse> horses) throws InterruptedException { // 21. а дальше просто не понимаю
int finishedCount = 0;
//напишите тут ваш код
return finishedCount;
}
public static List<Horse> prepareHorsesAndStart(int horseCount) { // 2. метод который возвратит Лист с объектами Horse и принимает 10 идем п.3
List<Horse> horses = new ArrayList<>(horseCount); // 3. создали лист объектов размером 10 ячеек идем п.4
String number; // 4. Создали Строку number идем п.5
for (int i = 1; i < horseCount + 1; i++) { // 5. Создали цикл на 10 оборотов идем п.6
number = i < 10 ? ("0" + i) : "" + i; // 6. number присвоим = 01,02,03... или 10 идем в п.7
horses.add(new Horse("Horse_" + number)); // 7. в Лист вложили новый объект, Horse ,в него же передаем "Horse_" + 1..2..3.. идем в п.8
// 7. но здесь же, я не понимаю что мы вкладываем в Лист?????
// 7. не понятно что хранит сейчас Лист? идем в п.9
}
for (int i = 0; i < horseCount; i++) { // 9. создали цикл на 10 оборотов идем в п.10
horses.get(i).start(); // 10. поднимаем из листа, только непонятно что поднимаем, и вот это непонятное стартует run() далее идем в п.11
}
return horses;
}
public static class Horse extends Thread {
private boolean isFinished;
public Horse(String name) { // 8. передали имя в переменную в супер класса Thread
super(name);
}
public boolean isFinished() {
return isFinished;
}
public void run() { // 11. старт далее п.12
String s = ""; // 12 создали строку далее п.13
for (int i = 0; i < 1001; i++) { // Delay // 13. цикл на 1000 далее п.14
s += "" + i; // 14. пустая трата памяти далее п.15
if (i == 1000) { // 15. если i равен 1000 далее п.16
s = " has finished the race!"; // 16. s присвоить текст далее п.17
System.out.println(getName() + s); // 17. вывод на экран супер имени далее с текстом далее п.18.
isFinished = true; // 18. Я так понимаю здесь лошадь добежала.
}
}
}
}
}