Threads

Hallo zusammen,

ich muss auch diese Aufgabe zu den Threads machen. Da die Aufgabe von Bilalmrc leide nicht mehr online ist stelle ich sie nochmal ein. Also,

Aufgabe 1 – Threads
Realisieren Sie eine sekundengenaue Autorennen-Simulation. Jedes Autorennen besteht aus einer
variablen Anzahl, jedoch mindestens vier, Rennwagen. Jeder Rennwagen soll dabei ein Thread sein,
der einen Namen sowie eine Startgeschwindigkeit in Metern pro Sekunde hat. Die
Startgeschwindigkeit sollte zwischen 80 km/h und 300 km/h liegen.
Sobald das Autorennen gestartet worden ist, "fahren" die Autos mit der Startgeschwindigkeit
multipliziert mit einem Zufallswert zwischen 0.5 und 1.5 Richtung Ziel. Beim Starten können Sie die
Synchronisation vernachlässigen. Jede Sekunde soll jedes Auto die bis dahin zurückgelegte Strecke
auf der Konsole ausgeben.
Die Strecke ist 3000m lang. Sobald ein Auto die Ziellinie überquert hat, soll eine Meldung auf der
Konsole ausgegeben werden.
Das Programm soll sich beenden, wenn alle Autos im Ziel angekommen sind
Beispielausgabe:
Rennen startet******
...
Rennwagen Ente hat sich 5000m bewegt
...
Rennwagen Gans hat sich 2500m bewegt
...
Rennwagen Ente hat das Ziel erreicht!
...
Rennwagen Gans hat das Ziel erreicht!


Hier ist nun mal ein Code den ich geschrieben habe:

Code:
public class Autorennen extends Thread {

	String name;
	double geschwindigkeit;
	
	public Autorennen(String name, double geschwindigkeit)
	{
		this.name = name;
		this.geschwindigkeit = geschwindigkeit;
	}
	
	public void run()
	{
		try { for (;;) 
				{
					System.out.println(name + " "+"ist vorne");
					sleep((long) (Math.random()*geschwindigkeit));
					
				}
		} catch (InterruptedException e)
		{
			return;
		}
	}
	
	public static void main(String[] args)
	{
		
		new Autorennen("porsche",100).start();		
		new Autorennen("audi",200).start();	
		
	}

Es läuft natürlich aber hält nicht an. Was muss ich denn machen damit ich quasi das "Ziel" realisieren kann und wie bekomme ich diesen Zufallswert zwischen 0,5 und 1,5 denn bei meiner Methode ist der Wert meine ich höher. Danke schonmal im vorraus.
 
^^ Oder lies in der Dokumentation nach. Die ist bei solchen Sachen auch immer sehr hilfreich.

Aber du hast noch einige andere Fehler in deinem Quellcode. Dein Quellcode gibt alle
Math.random()*geschwindigkeit Millisekunden "<Name> ist vorne" aus. Er sollte aber eigentlich jede Sekunde, also alle 1000 Millisekunden, "Rennwagen <Name> hat sich <Strecke> Meter bewegt."

Weiterhin ist for(;;) eher unschön. Da kannst du besser while(true) schreiben, das erfüllt den selben Zweck.

Um zu entscheiden wann ein Auto angekommen ist musst du auf jeden Fall die gesamte zurückgelegte Strecke speichern. Mehr Tipps gebe ich erst mal nicht. Aber eine bitte noch:
Mach die Instanzvariablen, also name und geschwindigkeit bitte private, das ist einfach besserer Programmierstil.
 
Zuletzt bearbeitet:
Zurück