StoppUhr Aufgabe

roundaboutmedia

Erfahrenes Mitglied
Hallo alle zusammen,
ich soll in Info Praktikum eine Stoppuhr Klasse erstellen.

Schreiben Sie eine neue Klasse Stoppuhr.java.
Diese Klasse speichert bei Aufruf des Konstruktors intern den Startpunkt Ihrer Zeitmessung in einer long-Variable in Millisekunden.
Die aktuelle Systemzeit in Millisekunden erhalten Sie so:
long startZeit = System.currentTimeMillis();
Ergänzen Sie eine Methode gibAktuelleDauer(), welche die bisher verstrichene Zeit in Sekunden (mit Nachkommastellen) als double-Wert zurückliefert. Die verstrichene Zeit ist die Differenz zwischen jetzt und dem Start der Zeitmessung.

Jetzt bin ich nicht gerade ein Pro in Java und kapier nicht ganz was er da von mir will.
Ich hab jetzt schon mal so angefangen.
Code:
public class StoppUhr {
	long startZeit;
	
	public StoppUhr (){
		long startZeit = System.currentTimeMillis();
		System.out.println(startZeit);
	}
	
	public double gibAktuelleDauer (){
		double stoppZeit = System.currentTimeMillis()-startZeit;
	return stoppZeit;	
	}

}

Code:
public class ZeitMessen extends StoppUhr {
	public static void main(String[] args) {
		int rateZeit = Toolbox.zufallInt(10, 20);
		System.out.println("Stoppen sie " + rateZeit + "Sekunden");
		System.out.println("Drücken sie Enter um das Spiel zu starten !");
		Toolbox.leseString(" ");
		new StoppUhr();
		System.out.println("Drücken die erneut enter um das Spiel zu beenden");
		Toolbox.leseString(" ");
		System.out.println(new StoppUhr().gibAktuelleDauer());
	}

}

Was ich jetzt nicht kapier ist wieso er mir immer die gleiche Zeit ausgibt. Ich hoffe ihr könnt mir die Erleuchtung bringen, ich bin am verzweifeln. :(

Danke schon mal.
Gruß
 
Hi!

Du erzeugst in Zeile 7 eine Stopuhr. Nach der 2. Nutzereingabe erzeugst du eine neue Uhr - und fragst dann von dieser die aktuelle Zeit ab.
Was du möchstest, ist aber die Zeit, die die zuerst erzeugte Uhr gerade anzeigt...

Btw: Du sollst die Zeit nicht in Millisekunden angeben (wie momentan), sondern in Sekunden - das musst du noch umrechnen!
EDIT:
Und warum deine 2. Klasse mit der Main-Methode von deiner Stopuhr erben muss, ist mir auch nicht ganz klar...
mfg,

RoCMe
 
Zuletzt bearbeitet:
Aber wie kann ich sonst auf die Methode gibAktuelleDauer zurückgreifen?
Ich muss doch sagen schau in die Klasse StoppUhr und führ die Methode
gibAktuelleDauer aus.
Die Methode zieht ja von der Aktuellen Zeit die startZeit ab oder nicht?

Ich bin gerade verwirrt
 
Aber wie kann ich sonst auf die Methode gibAktuelleDauer zurückgreifen?
Ich muss doch sagen schau in die Klasse StoppUhr und führ die Methode
gibAktuelleDauer aus.
Die Methode zieht ja von der Aktuellen Zeit die startZeit ab oder nicht?

Ich bin gerade verwirrt

Du musst dein Objekt speichern um später darauf zugreifen zu können:

Java:
MeineKlasse meineKlasse = new MeineKlasse();
RueckgabeWert rueckgabeWert = meineKlasse.methodenAufrufMitRueckgabeWert();

Schau dir dazu besonders mal Zeile 7 und 10 an ;)

Weiterhin Initilisierst du die Variable startZeit im Kontruktor neu, lass einfach long an dieser stelle weg!

Tipp: Du musst die Stoppzeit nicht zwischenspeichern, du kannst diese auch direkt zurückgeben:
Java:
public double gibAktuelleDauer (){ 
    return System.currentTimeMillis() - startZeit;
    }
 
Zuletzt bearbeitet:
Ok jetzt bin ich ganz raus. Könnt ihr mir helfen ich kappier jetzt gar nix mehr.
Also ich erstell in meiner einen Klasse Stoppuhr einen Konstruktor. Dieser
speichert mir die aktuelle Zeit in die Variable
long startZeit

Dann mach ich in der Methode das wieder die aktuelle Zeit in eine Variable gespeichert wird
und von dieser die startZeit abgezogen wird und geb diese zurück.

In der Klasse ZeitMessen ruf ich den Konstruktor der Stoppuhr auf wenn eine Eingabe gemacht wurde. Dann wenn man wieder Eingabe drück stoppt das Programm und ruft dabei die Methode auf und gibt die Differenz aus.

Hab ich das alles jetzt so richtig verstanden oder bin ich voll auf dem Holzweg?

Sorry wenn es nervt aber ich steig da noch nicht wirklich durch.

extends StoppUhr muss ich doch machen sonst kann die Klasse doch nicht auf Stoppuhr zurückgreifen oder nicht?
 
Zuletzt bearbeitet:
So jetzt gehts vielen Danke hier noch mal der Code wie es jetzt geht :)

Code:
package ZeitMessung;

import ToolBox.Toolbox;

public class ZeitMessen extends StoppUhr {
	public static void main(String[] args) {
		int rateZeit = Toolbox.zufallInt(10, 20);
		System.out.println("Stoppen sie " + rateZeit + "Sekunden");
		System.out.println("Drücken sie Enter um das Spiel zu starten !");
		Toolbox.leseString(" ");
		StoppUhr st = new StoppUhr();
		System.out.println("Drücken die erneut enter um das Spiel zu beenden");
		Toolbox.leseString(" ");
		double rw = st.gibAktuelleDauer();
		System.out.println(rw + " Sekunden");
		if (rateZeit - rw <= 1.0){
			System.out.println("sehr gut");
		}
		else {
			System.out.println("das geht noch besser!");
		}
	}

}
Code:
package ZeitMessung;

public class StoppUhr {
	long startZeit;
	
	public StoppUhr (){
		startZeit = System.currentTimeMillis();
	}
	
	public long gibAktuelleDauer (){		
	return (System.currentTimeMillis()-startZeit)/1000;	
	}

}

Wenn ihr noch Fehler findet wie ich es besser machen könnte bin ich euch noch mehr dankbar :).
Bin aber schon froh das es so jetzt geht
 
Hi
Deine ZeitMessen Klasse muss nicht von StoppUhr erben (extends StoppUhr). Wenn ich nicht gerade was übersehe macht das überhaupt keinen Sinn.

Ansonsten sehe ich gerade noch nen Schreibfehler:
"Drücken die erneut enter um das Spiel zu beenden"

Und "if (rateZeit - rw <= 1.0)" gibt auch true zurück, wenn du viel zu lange wartest. Also rateZeit wäre 5sec aber du wartest 20sec und drückst dann und bekommst immer noch ein sehr gut. Das nur so nebenbei :)
 
Zurück