UhrProgramm

JavaAnfänger1235

Bekanntes Mitglied
Hallo, es geht um folgendes:

Gegeben ist der Rahmen der Klasse Clock, welche eine digitale Uhr beschreibt. Ein Objekt der
Klasse Clock enthält drei Attribute (seconds- Anzahl der Sekunden,minutes- Anzahl der Minuten, hours - Anzahl der Stunden), welche die aktuelle Uhrzeit beschreiben. Die Uhr verwaltet die Zeit im 12-Stundenformat. Zur Unterscheidung, ob es gerade vormittags oder nachmittags ist, nutzt die Klasse Clock das Attribut anteMeridiem . Enthält dieses den Wert true, so ist es vormittags und enthält dieses den Wert false , so ist es nachmittags. Ihre Aufgabe ist es, den Konstruktor und die Methoden print und signal entsprechend der folgenden Beschreibung mit Anweisungen auszufüllen.
1.
Konstruktor- Dieser soll mit den Werten der Parameterliste die Attribute des Objektes
initialisieren. Vor der Zuweisung der einzelnen Werte an die Attribute muss somit geprüft
werden, ob die Parameter gültige Werte enthalten. Da die Klasse Clockdie Zeit im 12-
Stundenformat verwaltet, darf z.B. das Attribut hours somit nur Werte im Bereich
1≤hours≤12 annehmen. Ist ein Wert nicht gültig, so soll eine aussagekräftige Fehlermeldung ausgegeben werden.


Meine Ideen:

Java:
public  class Clock {
int seconds , minutes , hours;   // Sekunden , Minuten , Stunden
boolean anteMeridiem; // true = am | false = pm
                      //  Parameter: secs = Sekunde | mins = Minute | hs = Stunde | am = am oder pm
public Clock( int secs, int mins, int hs, boolean am) {
    if (hs>12 || hs<1) {
        System.out.println("Ungueltiger Wert (1 <= Stunde <= 12) !");
    }
    else {
        hours=hs;
    }
    if (mins>59 || mins<0) {
        System.out.println("Ungueltiger Wert (0 <= Minute <= 59) !");
    }
    else {
        minutes = mins;
    }
    if (secs>59 || secs<0) {
        System.out.println("Ungueltiger Wert (0 <= Sekunde <= 59) !");
    }
    else {
        seconds=secs;
    }
    anteMeridiem = am;
}
}
Kann man das so machen?
 

krgewb

Top Contributor
Sieht gut aus. Hast du es getestet?

Laut Aufgabenstellung soll noch signal verwendet werden wobei ich nicht weiß was das ist.
 

JavaAnfänger1235

Bekanntes Mitglied
Es ging mir erstmal um die Richtigkeit des Konstruktors.
Dann geht es weiter mit der Methode country. Die geht so:

Java:
public  void print(String  country) {
    if((country =="de") || (anteMeridiem==false)) {
        hours = hours + 12;
        }


Wenn ich aber folgendes teste:

Java:
public static void main (String[] args) {
    Clock myclock = new Clock (2,0,14,false);
myclock.print("de");
System.out.println(myclock.hours);
erhalte ich folgende ausgabe:

Ungueltiger Wert (1 <= Stunde <= 12) !
12
Warum?
Es sollte egtl nur 14 rauskommen?
 

JavaAnfänger1235

Bekanntes Mitglied
Ich habe den Fehler gefunden. Die Stunde soll die 3. Stelle ja sein:


Java:
ublic static void main (String[] args) {
    Clock myclock = new Clock (2,0,2,false);
myclock.print("de");
System.out.println(myclock.hours);

Das geht dann. Wenn ich jedoch myclock.print("en"); ändere:

Java:
ublic static void main (String[] args) {
    Clock myclock = new Clock (2,0,2,false);
myclock.print("en");
System.out.println(myclock.hours);
Kommt trotzdem 14 raus. Irgendwas stimmt da nicht?
 

krgewb

Top Contributor
Java:
if(country =="de")
So etwas wird nicht funktionieren. Du musst es wie folgt machen:
Java:
if(country.equals("de")
 

JavaAnfänger1235

Bekanntes Mitglied
Danke dir:) Stimmt ich bekomme ja nur die Referenz mit "==".
Dann müsste es so gehen:

Java:
public  void print(String  country) {
    if((country.equals("de")) && (anteMeridiem==false)) {
        hours = hours + 12;
        }
oder?
 

JavaAnfänger1235

Bekanntes Mitglied
Code:
public  class Clock {
int seconds , minutes , hours;   // Sekunden , Minuten , Stunden
boolean anteMeridiem; // true = am | false = pm
                      //  Parameter: secs = Sekunde | mins = Minute | hs = Stunde | am = am oder pm
public Clock( int secs, int mins, int hs, boolean am) {
    if (hs>12 || hs<1) {
        System.out.println("Ungueltiger Wert (1 <= Stunde <= 12) !");
    }
    else {
        hours=hs;
    }
    if (mins>59 || mins<0) {
        System.out.println("Ungueltiger Wert (0 <= Minute <= 59) !");
    }
    else {
        minutes = mins;
    }
    if (secs>59 || secs<0) {
        System.out.println("Ungueltiger Wert (0 <= Sekunde <= 59) !");
    }
    else {
        seconds=secs;
    }
    anteMeridiem = am;
}

public  void print(String  country) {
    if((country.equals("de")) && (anteMeridiem==false) &&  hours<=11) {
        hours = hours + 12;
        }
    else if((country.equals("de")) && (anteMeridiem==true) && hours==12) {
        hours=hours-12;
    }
   
}

public  void signal () {
    if(seconds<=58) {
        seconds=seconds+1;
       
    }
    else if(seconds ==59 && minutes<=58 ) {
        seconds=0;
        minutes= minutes +1;
        }
    else if(seconds ==59 && minutes==59 && hours<=10 ) {
        seconds=0;
        minutes= 0;
        hours=hours+1;
        }
        else if(seconds ==59 && minutes==59 && hours==11 && anteMeridiem==false  ) {
            seconds=0;
            minutes= 0;
            hours=12;
            anteMeridiem=true;
        }
       
        else if(seconds ==59 && minutes==59 && hours==11 && anteMeridiem==true  ) {
            seconds=0;
            minutes= 0;
            hours=12;
            anteMeridiem=false;
    }
    }

Das ist mein fertiges Programm
 

JavaAnfänger1235

Bekanntes Mitglied
Es soll wie folgt getestet werden:

Java:
public  static void   main( String[] args) {
          Clock myclock = new Clock (0,0,14,true);
          myclock = new Clock (0,60,3,false);
          myclock = new Clock (-1,15,3,false);

          for (int i = 1; i <= 2; i++) {
             if (i == 1) { myclock = new Clock (57,59,11,true);}
             else { myclock = new Clock (57,59,12,true);}
         
             //long waitingStartTime;
             int sec10 = 0;

             while (sec10 < 5) {
                //waitingStartTime = System.currentTimeMillis();
                  // while(System.currentTimeMillis() <= waitingStartTime + 1000)
                myclock.signal();
                sec10++;
                if (sec10 % 2 == 0) {
                  myclock.print("en");
                }
                else {
                  myclock.print("de");
                }
             }
             System.out.println("----------");
          }
       }

Ich erhalte als Ausgabe aber nur
Ungueltiger Wert (1 <= Stunde <= 12) !
Ungueltiger Wert (0 <= Minute <= 59) !
Ungueltiger Wert (0 <= Sekunde <= 59) !
----------
----------




Es sollte folgendes stehen:


ngueltiger Wert (1 <= Stunde <= 12) !
Ungueltiger Wert (0 <= Minute <= 59) !
Ungueltiger Wert (0 <= Sekunde <= 59) !
Aktuelle Zeit: 11:59:58
Aktuelle Zeit: 11:59:59 am
Aktuelle Zeit: 12:0:0
Aktuelle Zeit: 12:0:1 pm
Aktuelle Zeit: 12:0:2
----------
Aktuelle Zeit: 0:59:58
Aktuelle Zeit: 12:59:59 am
Aktuelle Zeit: 1:0:0
Aktuelle Zeit: 1:0:1 am
Aktuelle Zeit: 1:0:2

Was ist denn falsch?
 

krgewb

Top Contributor
Das ist mein fertiges Programm
Sieht gut aus. Du schreibst
Java:
        else if(seconds ==59 && minutes==59 && hours==11 && anteMeridiem==false  ) {
            seconds=0;
            minutes= 0;
            hours=12;
            anteMeridiem=true;
        }
    
        else if(seconds ==59 && minutes==59 && hours==11 && anteMeridiem==true  ) {
            seconds=0;
            minutes= 0;
            hours=12;
            anteMeridiem=false;
        }

Das könnte man vereinfachen:
Java:
        else if(seconds ==59 && minutes==59 && hours==11) {
            seconds=0;
            minutes= 0;
            hours=12;
            anteMeridiem = !anteMeridiem;
        }
 
Zuletzt bearbeitet:

krgewb

Top Contributor
Java:
    public void print(String country) {
        if ((country.equals("de")) && (anteMeridiem == false) && hours <= 11) {
            hours = hours + 12;
        } else if ((country.equals("de")) && (anteMeridiem == true) && hours == 12) {
            hours = hours - 12;
        }
        System.out.print("Aktuelle Zeit: " + hours + ":" + minutes + ":" + seconds + " ");
        System.out.print(anteMeridiem ? "am" : "pm");
        System.out.print("\n");
    }
 


Schreibe deine Antwort... und nutze den </> Button, wenn du Code posten möchtest...

Neue Themen


Oben