Java/Uhr

Aus ZUM-Unterrichten

Hinweis

Leider verschwinden nicht alle schwarzen Striche. Ich nehme an, das sind Rechenungenauigkeiten (Rundungsfehler) der Turtlemethode.

Benötigt
  • if, for, Turtlegrafik, int, double
  • BlueJ, daher keine main-Mathode
Screenshot
public class Uhr
{
    private int minute;
    private int stunde;
    private Turtle t;
    
    public Uhr(int pStunde, int pMinute)
    {
        if (stunde==0) {
            stunde=12;
        }
        minute=pMinute;
        stunde=pStunde;
        t=new Turtle();
        t.drehe(-90);
        t.zeige();
    }
 
    public void laufe15Sekunden(){
        for (int k=1;k<=15;k++){
            zeichneUhr(100,8); // 8 entspr. weiß
            stelleWeiter();
            zeichneUhr(100,0); // 0 entspr. schwarz
            t.ruhe(1000);
        }        
    }
    
    public void stelleWeiter()
    {
        minute++;
        if (minute>59) {
            minute=0; 
            stunde++;
            if (stunde>12) {
                stunde=1;
            }
        }
    }
    
    public void zeichneUhr(double pZeigerlaenge, int pFarbe){
        t.setzeFarbe(pFarbe);
        t.drehe(minute*360/60);
        t.vor(pZeigerlaenge);
        t.vor(-pZeigerlaenge);
        t.drehe(-minute*360/60);
        t.drehe(stunde*360/12);
        t.vor(pZeigerlaenge*0.8);
        t.vor(-pZeigerlaenge*0.8);
        t.drehe(-stunde*360/12);        
    }
    
    public int gibVergangeneMinutenSeitMitternacht() {
        int zwischenspeicher;
        zwischenspeicher = minute + stunde * 60;
        return zwischenspeicher;
    }

    public void schreibeUhrzeit() {
        System.out.println("Es ist "+stunde+":"+minute+", das ist "+gibVergangeneMinutenSeitMitternacht()+" Minuten nach Mitternacht");
    }
}

Übung

Analysieren Sie die Klasse Uhr.

  1. Klären Sie am Beispiel der Uhr folgende Begriffe:
    • Klasse, Methode, Datentyp, Parameter, Schleife (for), Bedingte Ausführung (if)
  2. Zeichnen Sie das Klassendiagramm zur Klasse Uhr.
  3. Implementieren Sie die Methode stelleUhr(int pStunde, int pMinute), die die Uhrzeit auf die angegebenen Parameter verstellt. Das soll aber nur dann geschehen, wenn eine gültige Uhrzeit übergeben wurde (Stunden bis max. 12 und Minuten bis 59). Falls als Stunde 0 angegeben wurde, soll der Wert auf 12 gestellt werden.
  4. Implementieren Sie die Methode stelleUmXMinutenVor(int x), die die Uhrzeit um x-Minuten verstellt. (Hinweis: es gibt zumindest 2 völlig verschiedene Lösungswege!)
  5. Ergänzen Sie die Uhr um eine Datumsangabe mit Tag und Monat. Implementieren Sie dazu auch stelleDatumWeiter(), die das Datum um einen Tag vorstellt. (Zur Vereinfachung vernachlässigen wir die Schaltjahre).
  6. Zusatzaufgabe: Ergänzen Sie eine Alarmfunktion.
  7. Zusatzaufgabe (Übungen zur Turtlegrafik):
    • Lassen Sie ein Ziffernblatt zeichnen.
    • Wahrscheinlich werden Sie die folgenden Befehle benötigen:
    • fuelleKreis(double radius)
    • schreibe(String text)