package de.codegym.task.task16.task1612;
/*
Stoppuhr
*/
public class Solution {
public static volatile boolean isStopped = false;
public static void main(String[] args) throws InterruptedException {
Runner usain = new Runner("Usain", 4);
Runner carl = new Runner("Carl", 2);
// Auf die Plätze!
// Fertig!
// Los!
usain.start();
carl.start();
Thread.sleep(2000);
isStopped = true;
Thread.sleep(1000);
}
public static class Stopwatch extends Thread {
private Runner owner;
private int stepNumber;
public Stopwatch(Runner runner) {
this.owner = runner;
}
public void run() {
try {
while (!isStopped) {
doStep();
}
} catch (InterruptedException ignored) {
}
}
private void doStep() throws InterruptedException {
stepNumber++;
long oneStepTime = 1000 / owner.getSpeed();
if(oneStepTime == 500){
Thread.sleep(500);
}
if(oneStepTime == 250){
Thread.sleep(250);
}
System.out.println(owner.getName() + " macht Schritt " + stepNumber + "!");
}
}
public static class Runner {
Stopwatch stopwatch;
private String name;
private int speed;
public Runner(String name, int speed) {
this.name = name;
this.speed = speed;
this.stopwatch = new Stopwatch(this);
}
public String getName() {
return name;
}
public int getSpeed() {
return speed;
}
public void start() {
stopwatch.start();
}
}
}
hidden #10625598
Level 23
das ergebniss stimmt doch hier?
In der Diskussion
Kommentare (3)
- Beliebt
- Neu
- Alt
Du musst angemeldet sein, um einen Kommentar schreiben zu können
Artem Divertitto Senior Android Developer bei United Tech
26 Juni 2020, 12:45
I think this code is excess
Try to call sleep() method only with oneStepTime argument +1
Pablo
26 Juni 2020, 11:10
das Programm muss auch funktionieren wenn du einen neuen runner mit einem int speed hast. Schau nochmal auf deine if Bedingung. Die kannst du eigentlich weglassen und in den thread.sleep Befehl gleich deinen long Parameter oneStepTime übergeben.
+2
hidden #10625598
26 Juni 2020, 13:43
ah tatsache, verrückt danke dir!
0