Moin zusammen,
ich arbeite gerade Übungsaufgaben von "Java lernen mit BlueJ" von Kölling. Bei einer Uhreaufgabe habe ich eine 24-Stunden-Anzeige, die ich jetzt soweit erweitert habe, dass sie nur 12 Stunden mit AM/PM anzeigt. Funktionieren tut es soweit, außer dass sich nach dem Stundenwechsel in der Ausgabe 2 mal je ein zusätzliches ":" einschleicht. Also ich habe "11:59:59 pm" stehen und nachdem ich die Sekunde erhöhe sollte da eigentlich "12:00:00 am" stehen, allerdings entstehen nach dem Stunden/Sekunden-Wechsel 2 zusätzliche Doppelpunkte, also "12:00::00: am" und ich verstehe nicht, wo die zusätzlichen Doppelpunkte herkommen...
Hier mein Code:
Kann mir jemand sagen, wo mein Fehler liegt?
ich arbeite gerade Übungsaufgaben von "Java lernen mit BlueJ" von Kölling. Bei einer Uhreaufgabe habe ich eine 24-Stunden-Anzeige, die ich jetzt soweit erweitert habe, dass sie nur 12 Stunden mit AM/PM anzeigt. Funktionieren tut es soweit, außer dass sich nach dem Stundenwechsel in der Ausgabe 2 mal je ein zusätzliches ":" einschleicht. Also ich habe "11:59:59 pm" stehen und nachdem ich die Sekunde erhöhe sollte da eigentlich "12:00:00 am" stehen, allerdings entstehen nach dem Stunden/Sekunden-Wechsel 2 zusätzliche Doppelpunkte, also "12:00::00: am" und ich verstehe nicht, wo die zusätzlichen Doppelpunkte herkommen...
Hier mein Code:
Java:
/**
* Die Klassen Uhrenanzeige implementiert die Anzeige einer Digitaluhr.
* Die Anzeige zeigt Stunden und Minuten. Der Anzeigebereich reicht von
* 00:00 (Mitternacht) bis 23:59 (eine Minute vor Mitternacht).
*
* Eine Uhrenanzeige sollte minütlich "Taktsignale" (über die Operation
* "taktsignalGeben") erhalten, damit sie die Anzeige aktualisieren
* kann. Dies geschieht, wie man es bei einer Uhr erwartet: Die
* Stunden erhöhen sich, wenn das Minutenlimit einer Stunde erreicht
* ist.
*
* @author Michael Kölling und David J. Barnes
* @version 2008.03.30
*/
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.
*/
public void taktsignalGeben()
{
{ sekunden.erhoehen();
if(sekunden.gibWert() == 0) // Limit wurde erreicht!
minuten.erhoehen();
if(minuten.gibWert() == 0) // Limit wurde erreicht!
stunden.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()
{
int stunde = stunden.gibWert();
String amPm = "am";
if (stunde > 11) {
amPm = "pm";
stunde = stunde - 12;
}
if (stunde == 0) {
stunde = 12;
}
zeitanzeige = stunde + ":" + minuten.gibAnzeigewert()+":" + sekunden.gibAnzeigewert()+" " + amPm;
}
}
Kann mir jemand sagen, wo mein Fehler liegt?
Zuletzt bearbeitet von einem Moderator: