OOP Uhrenanzeige programmieren, Achtung Anfänger!

SirCastic

Mitglied
Hallo liebes Forum,

ich habe mich gerade neu hier angemeldet und muss ich euch gleich mit einem Problem belästigen und hoffe ihr könnt mir helfen. :D

Ich habe zwei Klassen erhalten, ein Mal Uhrenanzeige und Nummernanzeige. Es soll eine Uhr darstellen mit Stunden und Minuten. Wenn ich ein Taktsignal gebe, sollen die Minuten um 1 erhöht werden und wenn die Minuten nach 59 wieder auf 0 umspringen, soll die Stunde um 1 erhöht werden.
So weit so gut .. nun soll ich das Ganze so umprogrammieren, dass diese Uhrenanzeige auch Sekunden enthält und ich komme mit dem Taktsignal nicht so ganz klar.
Es werden jetzt zwar die Sekunden beim Signal geben erhöht und auch die Minuten um 1, wenn die Sekunden wieder auf 0 springen, aber ich bekomme es einfach nicht hin, dass die Stunden umspringen, wenn die Minuten wieder auf 0 springen.

Ich hoffe ihr könnt mir helfen.

Uhrenanzeige:
Java:
public class Uhrenanzeige
{
    private Nummernanzeige stunden;
    private Nummernanzeige minuten;
    private Nummernanzeige sekunden;
    private String zeitanzeige;    // simuliert die tatsächliche Anzeige
    
    /**
     * Konstruktor für ein Exemplar von Uhrenanzeige.
     * Mit diesem Konstruktor wird die Anzeige auf 00:00 initialisiert.
     */
    public Uhrenanzeige()
    {
        stunden = new Nummernanzeige(24);
        minuten = new Nummernanzeige(60);
        sekunden = new Nummernanzeige(60);
        anzeigeAktualisieren();
    }

    /**
     * Konstruktor für ein Exemplar von Uhrenanzeige.
     * Mit diesem Konstruktor wird die Anzeige auf den Wert
     * initialisiert, der durch 'stunde' und 'minute' 
     * definiert ist.
     */
    public Uhrenanzeige(int stunde, int minute, int sekunde)
    {
        stunden = new Nummernanzeige(24);
        minuten = new Nummernanzeige(60);
        sekunden = new Nummernanzeige(60);
        setzeUhrzeit(stunde, minute, sekunde);
    }

    /**
     * Diese Operation sollte einmal pro Minute aufgerufen werden -
     * sie sorgt dafür, dass diese Uhrenanzeige um eine Minute
     * weiter gestellt wird.
     */
    /**
     * Sekunde bekommt Takt, Minute wird erhöht. Musst noch hinbekommen, dass
     * Stunde erhöht wird.
     */
    public void taktsignalGeben()
    {
        sekunden.erhoehen();
        if(sekunden.gibWert() == 0) {  // Limit wurde erreicht!
            minuten.erhoehen();
        }
        anzeigeAktualisieren();
    }

    /**
     * Setze die Uhrzeit dieser Anzeige auf die gegebene 'stunde' und
     * 'minute'.
     */
    public void setzeUhrzeit(int stunde, int minute, int sekunde)
    {
        stunden.setzeWert(stunde);
        minuten.setzeWert(minute);
        sekunden.setzeWert(sekunde);
        anzeigeAktualisieren();
    }

    /**
     * Liefere die aktuelle Uhrzeit dieser Uhrenanzeige im Format SS:MM.
     */
    public String gibUhrzeit()
    {
        return zeitanzeige;
    }
    
    /**
     * Aktualisiere die interne Zeichenkette, die die Zeitanzeige hält.
     */
    private void anzeigeAktualisieren()
    {
        zeitanzeige = stunden.gibAnzeigewert() + ":"
                      + minuten.gibAnzeigewert() + ":" 
                      + sekunden.gibAnzeigewert();
    }
}

Und falls es noch erforderlich ist der Code zur Nummernanzeige:
Java:
public class Nummernanzeige
{
    private int limit;
    private int wert;

    /**
     * Konstruktor für Exemplare der Klasse Nummernanzeige.
     * Setzt das Limit, bei dem die Anzeige zurückgesetzt wird.
     */
    public Nummernanzeige(int anzeigeLimit)
    {
        limit = anzeigeLimit;
        wert = 0;
    }

    /**
     * Liefere den aktuellen Wert als int.
     */
    public int gibWert()
    {
        return wert;
    }

    /**
     * Liefere den Anzeigewert, also den Wert dieser Anzeige als
     * einen String mit zwei Ziffern. Wenn der Wert der Anzeige
     * kleiner als zehn ist, wird die Anzeige mit einer führenden
     * Null eingerückt.
     */
    public String gibAnzeigewert()
    {
        if(wert < 10) {
            return "0" + wert;
        }
        else {
            return "" + wert;
        }
    }

    /**
     * Setze den Wert der Anzeige auf den angegebenen 'ersatzwert'.
     * Wenn der angegebene Wert unter Null oder über dem Limit liegt,
     * tue nichts.
     */
    public void setzeWert(int ersatzwert)
    {
        if((ersatzwert >= 0) && (ersatzwert < limit)) {
            wert = ersatzwert;
        }
    }

    /**
     * Erhöhe den Wert um Eins. Wenn das Limit erreicht ist, setze
     * den Wert wieder auf Null.
     */
    public void erhoehen()
    {
        wert = (wert + 1) % limit;
    }
}
 
Zuletzt bearbeitet von einem Moderator:

JavaGamer

Bekanntes Mitglied
Also ich würde es ja so machen, deine Sekunden bevor du diese 0 setzt noch mal abzuspeichern und dann immer erhöhen wenn die Sekunden wieder bei 0 ankommen, so kommst du irgendwann auf 600 Sekunden und kannst dann die Stunde um 1 erhöhen. Dies sollte auch verhindern, dass wenn du Sekunden (Sekunden > 0) hast und Minuten auf 0 ist sich die Stunden erhöhen. Du brauchst nur 2 Variablen für Sekunden wobei nur die angezeigt wird, die sich wieder auf 0 setzt wenn die Minuten erhöht werden und die andere einfach auf 0 setzten wenn die Stunden erhöht werden.
 

SirCastic

Mitglied
Ich verstehe deine Antwort leider nicht wirklich..
Vor allem müssten die Sekunden doch bei 3600 sein, um die Stunde zu erhöhen oder nicht?
Und ich muss die Uhrzeit auch noch ausgeben.. wie stelle ich das denn dann an, dass die Sekunden richtig anzeigt werden und nicht z.B. 3500 Sekunden?
 

JavaGamer

Bekanntes Mitglied
Ich verstehe deine Antwort leider nicht wirklich..
Vor allem müssten die Sekunden doch bei 3600 sein, um die Stunde zu erhöhen oder nicht?
Und ich muss die Uhrzeit auch noch ausgeben.. wie stelle ich das denn dann an, dass die Sekunden richtig anzeigt werden und nicht z.B. 3500 Sekunden?
Ja, die Sekunden müssen bei 3600 sein.

Du erstellst eine zweite Variable, z.B. sekundenBackup, diese wird immer um 60 erhöht wenn deine Variable sekunden ihr maximum, also 60 erreicht hat (da eine Minute keine 61 Sekunden haben kann).
Wichtig ist jetzt hier noch, in deiner GUI wird weiterhin nur die Variable sekunden gezeigt, also der User bekommt die Variable sekundenBackup nie zu gesicht. Diese Variable sekundenBackup wird dann wenn diese 3600 erreicht hat auf 0 zurückgesetzt und die Stunde um 1 erhöht.

Verstanden?
 

SirCastic

Mitglied
Das klingt jetzt auf jeden Fall logisch, vielen Dank.
Jetzt muss ich eine weitere Variable festlegen (sekundenBackup) und dann noch eine if-Abfrage programmieren, die folgendes macht: wenn sekunden == 0, dann sekundenBackup + 60
Und eine weitere if-Abfrage die das macht: wenn sekundenBackup == 0, dann erhöhe Stunde +1?
 

SirCastic

Mitglied
Ich habs jetzt erstmal so gemacht, allerdings weiß ich nicht ob ich es richtig gemacht habe und wo ich z.B. dann das Limit von 3600 Sekunden setzen kann.. >.<

Außerdem zeigt mit eclipse folgendes an: "The value of the field Uhrenanzeige.sekundenBackup is not used."

Ich glaub ich bin heute einfach etwas überfordert. :D

Code:
public class Uhrenanzeige
{
    private Nummernanzeige stunden;
    private Nummernanzeige minuten;
    private Nummernanzeige sekunden;
    private int sekundenBackup;
    private String zeitanzeige;    // simuliert die tatsächliche Anzeige
    
    /**
     * Konstruktor für ein Exemplar von Uhrenanzeige.
     * Mit diesem Konstruktor wird die Anzeige auf 00:00 initialisiert.
     */
    public Uhrenanzeige()
    {
        stunden = new Nummernanzeige(24);
        minuten = new Nummernanzeige(60);
        sekunden = new Nummernanzeige(60);
        sekundenBackup = 0;
        anzeigeAktualisieren();
    }

    /**
     * Konstruktor für ein Exemplar von Uhrenanzeige.
     * Mit diesem Konstruktor wird die Anzeige auf den Wert
     * initialisiert, der durch 'stunde' und 'minute' 
     * definiert ist.
     */
    public Uhrenanzeige(int stunde, int minute, int sekunde)
    {
        stunden = new Nummernanzeige(24);
        minuten = new Nummernanzeige(60);
        sekunden = new Nummernanzeige(60);
        sekundenBackup = 0;
        setzeUhrzeit(stunde, minute, sekunde);
    }

    /**
     * Diese Operation sollte einmal pro Minute aufgerufen werden -
     * sie sorgt dafür, dass diese Uhrenanzeige um eine Minute
     * weiter gestellt wird.
     */
    /**
     * Sekunde bekommt Takt, Minute wird erhöht. Musst noch hinbekommen, dass
     * Stunde erhöht wird.
     */
    public void taktsignalGeben()
    {
        sekunden.erhoehen();
		if(sekunden.gibWert() == 0) {	// Limit wurde erreicht!
			minuten.erhoehen();
		if(sekunden.gibWert() == 0) {
			sekundenBackup += 60;
		}
			
        }
        anzeigeAktualisieren();
    }

    /**
     * Setze die Uhrzeit dieser Anzeige auf die gegebene 'stunde' und
     * 'minute'.
     */
    public void setzeUhrzeit(int stunde, int minute, int sekunde)
    {
        stunden.setzeWert(stunde);
        minuten.setzeWert(minute);
        sekunden.setzeWert(sekunde);
        anzeigeAktualisieren();
    }

    /**
     * Liefere die aktuelle Uhrzeit dieser Uhrenanzeige im Format SS:MM.
     */
    public String gibUhrzeit()
    {
        return zeitanzeige;
    }
    
    /**
     * Aktualisiere die interne Zeichenkette, die die Zeitanzeige hält.
     */
    private void anzeigeAktualisieren()
    {
        zeitanzeige = stunden.gibAnzeigewert() + ":"
                      + minuten.gibAnzeigewert() + ":" 
                      + sekunden.gibAnzeigewert();
    }

	

	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

}
 

X5-599

Top Contributor
Also als Ergänzung zu JavaGamers Lösungsansatz hier nochmal einer der sich auf deine Ursprungsfrage bezieht:
Im Grunde brauchst du nur deine Taktgeber Methode anpassen:

Java:
public void taktsignalGeben()
{
	sekunden.erhoehen();
	if(sekunden.gibWert() == 0) { // Limit wurde erreicht!
		minuten.erhoehen();
		
		if(minuten.gibWert() == 0) {
			stunden.erhoehen();
		}
	}
	anzeigeAktualisieren();
}
 

arilou

Bekanntes Mitglied
Soll ich jetzt mal so richtig gemein sein und erwähnen, dass eine Minute aufgrund von Schaltsekunden bis zu 62 Sekunden haben kann?
Und Schaltsekunden meist nach 23:59:59 eingefügt werden?

Oh, und es gibt auch negative Schaltsekunden, dann ist eine Minute nur 59 oder sogar nur 58 Sekunden lang...
 
Zuletzt bearbeitet:

SirCastic

Mitglied
@Joose
Da hab ich den falschen Tag benutzt, tut mir leid. :D

@X5-599
Diesen Lösungsweg hatte ich als erstes versucht und hab wohl irgendwie nen Fehler gemacht, sodass es nicht geklappt hat. Jetzt funktioniert es, vielen Dank.^^

@arilou
Danke, aber ich denke das ist nicht nötig für meinen Lösungsweg. :D :D

Vielen Dank Leute, ich werde euch vermutlich in nächster Zeit häufiger belästigen. ;)
Thema kann jetzt übrigens geschlossen werden.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
U 12 Stunden Uhrenanzeige realiesieren in BlueJ! Java Basics - Anfänger-Themen 28
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
B OOP was heißt objektorientiertes Programmieren (fragt ein absoluter Anfänger) Java Basics - Anfänger-Themen 17
laxla123 Rechteck programmieren Java Basics - Anfänger-Themen 4
A Erste Schritte Dynamische Stempel im PDF Exchange programmieren Java Basics - Anfänger-Themen 0
D Programmieren nach UML Java Basics - Anfänger-Themen 2
Y Taschenrechner programmieren Java Basics - Anfänger-Themen 3
B Überweisung programmieren Java Basics - Anfänger-Themen 7
bluetrix Programmieren eines Bots für Zahlen-Brettspiel Java Basics - Anfänger-Themen 9
D Ampel Programmieren die jede 10 sekunden ihre farbe wechselt Java Basics - Anfänger-Themen 6
J ArrayList add methode selbst programmieren Java Basics - Anfänger-Themen 10
00111010101 Objektorientiertes Programmieren mit Vererbung (Zahlen in Array verschwinden) Java Basics - Anfänger-Themen 3
thor_norsk Fernseher programmieren mit Java Java Basics - Anfänger-Themen 4
M Jenga Regeln Java Programmieren Java Basics - Anfänger-Themen 1
M Ressourcensparend programmieren Java Basics - Anfänger-Themen 3
brypa Wie Programmieren lernen? Java Basics - Anfänger-Themen 15
G Spielerwechsel programmieren Java Basics - Anfänger-Themen 1
J Solitär (Brettspiel) programmieren Java Basics - Anfänger-Themen 3
H Objektorientiertes Programmieren Java Basics - Anfänger-Themen 4
K 12- Stunden Konverter Programmieren Java Basics - Anfänger-Themen 1
WAB9703-04 Programm zum automatischen Ausfüllen von Formularen programmieren Java Basics - Anfänger-Themen 3
L Zahlenspiel programmieren Java Basics - Anfänger-Themen 1
TimoN11 Automat programmieren Java Basics - Anfänger-Themen 4
G Erste Schritte Array Mittelwert Methode Programmieren Java Basics - Anfänger-Themen 5
ehmo würfelspiel programmieren anfänger Java Basics - Anfänger-Themen 1
N Ufospiel programmieren Java Basics - Anfänger-Themen 13
KogoroMori21 Vorbereitung auf die Programmieren Klausur vom ersten Semester Java Basics - Anfänger-Themen 4
Drinkerbell Erste Schritte Zu blöd zum Programmieren? Java Basics - Anfänger-Themen 9
G Stack programmieren Java Basics - Anfänger-Themen 6
I Brauche Hilfe bei Objektorientiertem programmieren Java Basics - Anfänger-Themen 23
T Auf einem Schachbrett bewegen programmieren Java Basics - Anfänger-Themen 2
G Bruchrechner programmieren Java Basics - Anfänger-Themen 6
G Ufo Spiel programmieren Java Basics - Anfänger-Themen 13
D Schachbrett (8x8) programmieren Java Basics - Anfänger-Themen 3
J Spiel programmieren Java Basics - Anfänger-Themen 16
J Hilfe beim Programmieren Java Basics - Anfänger-Themen 5
S Kreisberechnung3 Buch: Programmieren lernen mit Java von Hans-Peter Habelitz Java Basics - Anfänger-Themen 39
M Quiz in Java programmieren mit Array Java Basics - Anfänger-Themen 8
S Spiel-Programmieren. Wenn ein Objekt den anderen berührt. Java Basics - Anfänger-Themen 6
K Java programmieren Java Basics - Anfänger-Themen 6
V_Fynn03 Kontrolle des Quelltextes (Bank programmieren)(GUI) Java Basics - Anfänger-Themen 6
D Was tun gegen zu komplzierten Denken beim Programmieren Java Basics - Anfänger-Themen 27
V_Fynn03 Bruchrechner programmieren (2 Klassen) Java Basics - Anfänger-Themen 9
N Ticketautomat programmieren Java Basics - Anfänger-Themen 63
M Rechner programmieren Java Basics - Anfänger-Themen 3
V_Fynn03 Java Bruchrechner programmieren Java Basics - Anfänger-Themen 13
J Java Suchfunktion Programmieren Java Basics - Anfänger-Themen 1
L Erste Schritte Bin ich "zu dumm" oder nicht geeignet zum Programmieren? Java Basics - Anfänger-Themen 3
U Ist jemad gut in programmieren (JAVA) und kann mir helfen? Java Basics - Anfänger-Themen 1
H Uhr programmieren Java Basics - Anfänger-Themen 10
T Schalter programmieren Java Basics - Anfänger-Themen 17
S Ampel Programmieren Java Basics - Anfänger-Themen 5
P Erste Schritte Probleme mit dem Programmieren Java Basics - Anfänger-Themen 12
D Richtig für Programmieren an der UNI lernen Java Basics - Anfänger-Themen 8
B Folgende Abfrage dynamisch programmieren? Java Basics - Anfänger-Themen 8
D Beim Programmieren auf die Logisch einfache Lösung kommen. Java Basics - Anfänger-Themen 17
B UML Klassen Diagramm zu Java Code Programmieren und ausführen Java Basics - Anfänger-Themen 21
steven789hjk543 Kann man mit Java und Eclipse einen Virus programmieren? Java Basics - Anfänger-Themen 13
S Spiel programmieren mit Java Java Basics - Anfänger-Themen 11
A Kalender programmieren, ich finde meinen Fehler nicht. Java Basics - Anfänger-Themen 9
S Erste Schritte Hilfe beim lernen von Programmieren Java Basics - Anfänger-Themen 2
V Zeichenkette programmieren Java Basics - Anfänger-Themen 20
O Fenster programmieren Java Basics - Anfänger-Themen 2
R Uebersichtlicher bzw. besser Programmieren Java Basics - Anfänger-Themen 13
N Dynamisches Programmieren/Fibonacci Java Basics - Anfänger-Themen 1
B Spielfiguren für ein Beute-Jägerspiel programmieren Java Basics - Anfänger-Themen 12
A Programmieren lernen Java Basics - Anfänger-Themen 28
F ArrayListe manuell programmieren? Java Basics - Anfänger-Themen 24
X Erste Schritte Einstieg ins Programmieren Java Java Basics - Anfänger-Themen 2
O Erste Schritte ln(1+x) Reihe Programmieren Java Basics - Anfänger-Themen 6
Ellachen55 Weihnachtsbaum in Eclipse programmieren Java Basics - Anfänger-Themen 6
L Klassen Geldrückgabe - Aufgabe Programmieren Java Basics - Anfänger-Themen 23
H Stern Dreieck (Buch: Grundkurs Programmieren) Java Basics - Anfänger-Themen 2
V Variablen Vorkommen programmieren Java Basics - Anfänger-Themen 18
S Dreieckssignal programmieren Java Basics - Anfänger-Themen 5
K Fehler beim Programmieren von TicTacToe Java Basics - Anfänger-Themen 12
M Spiel programmieren Java Basics - Anfänger-Themen 16
A Fenster programmieren Java Basics - Anfänger-Themen 1
V OOP Kassensystem objektorientiert programmieren Java Basics - Anfänger-Themen 15
A Erste Schritte DoodleJump programmieren: Kollisionsabfrage Java Basics - Anfänger-Themen 4
CT9288 Kleine Simulation programmieren, denkanstöße erbeten Java Basics - Anfänger-Themen 19
H Welche IDE zum Buch "Programmieren mit Java" von Reinhard Schiedermeier des Verlags Pearson Studium Java Basics - Anfänger-Themen 19
D Könnt ihr mir helfen beim Programmieren eines Ping Pong Spieles? Java Basics - Anfänger-Themen 9
M Rekursive Methode Programmieren Java Basics - Anfänger-Themen 3
I Spielbrett programmieren: Datenstruktur Java Basics - Anfänger-Themen 3
G Rekursives Programmieren --> harmonische Reihe Java Basics - Anfänger-Themen 3
A Endlich anfangen mit Programmieren ! Java Basics - Anfänger-Themen 8
L Karawane programmieren Java Basics - Anfänger-Themen 0
kokojamboo92 Spiel programmieren Java Basics - Anfänger-Themen 1
E Mastermind programmieren, wie den falschen Platz aber richtige Farbe schecken? Java Basics - Anfänger-Themen 23
steven789hjk543 Erste Schritte java programmieren/ Schritt für Schritt Java Basics - Anfänger-Themen 14
I Spiel programmieren. Java Basics - Anfänger-Themen 16
H [Studium] Mäxchenspiel programmieren Java Basics - Anfänger-Themen 10
C BlueJ Zahlenschloss programmieren Java Basics - Anfänger-Themen 5
steven789hjk543 mit dem Smartphone java programmieren Java Basics - Anfänger-Themen 44
F Okjektorientiert programmieren Java Basics - Anfänger-Themen 2
S OOP Ticketsystem programmieren Java Basics - Anfänger-Themen 6
P Selber Programmieren lernen oder Uni? Java Basics - Anfänger-Themen 12
P Kasse programmieren Java Basics - Anfänger-Themen 12
D Timer programmieren Java Basics - Anfänger-Themen 13

Ähnliche Java Themen

Neue Themen


Oben