Methoden Uhr als Übungsaufgabe Klassen/Objekte

keeev

Mitglied
Moin Jungs, erstmal zu meiner Aufgabenstellung:

Es soll die Klasse "uhr" entworfen werden. Diese besteht aus den
Attributen "tag", "stunde", "minute" und "sekunde" und den
Methoden "anzeigen", "aendern", "lesen" und "stellen".
Ausserdem ist der Konstruktor bereitzustellen.

a) Die Methode "anzeigen" gibt die 4 Attribute, jeweils mit ":",
getrennt, auf Bildschirm aus.

b) In "stellen" werden die 4 uebergebenen Parameter (Tag, Stunde, Minute,
Sekunde) in die Attribute eingetragen. Die uebergebenen Parameter
sind auf den zulaessigen Wertebereich nach oben und unten zu begrenzen.

c) "lesen" gibt die Elementvariablen als Kopie zurueck (z.B. an ein
bereitgestelltes Feld).

d) "aendern" erhoeht die Zeit um eine Sekunde (und bringt, wenn noetig,
danach natuerlich die Zeit wieder in eine richtige Darstellung.
Es gibt z.B. keine 60 Sekunden !).

e) Der Konstruktor nimmt die 4 Parameter (Tag, Stunde, Minute und Sekunde)
an, stellt damit die Uhr und gibt eine Meldung aus, die aus
"Konstruktor von uhr: " und der aktuellen Uhrzeit besteht.

f) In "main" wird das Objekt "kuckuck" der Klasse "uhr" erzeugt. In einer
Endlosschleife wird dann jeweils die aktuelle Uhrzeit angezeigt und
die Sekunden um 1 erhoeht.
Die Anzeige kann ueber die Methode "anzeigen" erfolgen. Es waere aber
auch moeglich, ueber die Methode "lesen" an die private-Attribute zu
gelangen und diese dann in "main" ueber "System.out.print ..." auszu-
geben.


Jetzt hab ich zwei Dateien, sprich Uhr.java und Uhrzeit.java.

Erstmal Uhrzeit.java:

Java:
	public static void main (String [] args) {
	
	Uhr kuckuck = new Uhr("Freitag", 22, 4, 12);			// Kuckuck als Objekt von Uhr wird erstellt mit Parameter
	
	}
}

Und hier die Klasse Uhr.java:

Java:
public class Uhr {
	String tag;
	int stunde;
	int minute;
	int sekunde;
	
	void anzeige() {
	System.out.println(tag + " : " + stunde + " : " + minute + " : " + sekunde);
	}
	
	// Konstruktor von Uhr
	public Uhr (String t, int s, int min, int sek){
	tag = t;
	stunde = s;
	minute = min;
	sekunde = sek;
	System.out.println ("Konstruktor von Uhr: " + tag + " : " + stunde + " : " + minute + " : " + sekunde);
	}
}


Wie bekomm ich jetzt das mit anzeige() hin? Irgendwie verzweifel ich grad 🙁
 
Die Methode anzeigen() hast du doch schon. Schreibe erst mal die anderen geforderten Methoden.
Zum Schluss kannst du dann die Schleife in der Mainmethode programmieren, in der du setzen() und anzeigen() aufrufst.
 
Also ich habs jetzt nochmal komplett von vorne aufgerollt und es funktioniert 😉.
Hier mein Programm:

Java:
public class Uhrzeit {

	public static void main (String [] args) {

	Uhr kuckuck = new Uhr("Freitag", 23, 59, 56);			// Kuckuck als Objekt von Uhr mit Parameter
	for (int i=1; i>0; i++)
		{
			 try
   			 	{
       			Thread.sleep (1000l) ;
   				}
  			 catch (Exception e)
  			 	{
        		System.out.print (e) ;
    			}
			kuckuck.aendern();
			kuckuck.anzeigen();
		}
	}
}

class Uhr {
	
	String tag;
	int stunde;
	int minute;
	int sekunde;
	
		void anzeigen() {
			System.out.printf (tag + " : %02d : %02d : %02d", stunde, minute, sekunde);
			System.out.println (" ");
		}
		
		void aendern() {
			sekunde++;
			if (minute==59 && sekunde==60) { minute=0; sekunde=0; stunde++; }
			if (sekunde==60) { sekunde=0; minute++;}
			if (stunde==24) 
				{ 	stunde=0;
					if (tag=="Montag") tag="Dienstag";
					else if (tag=="Dienstag") tag="Mittwoch";
					else if (tag=="Mittwoch") tag="Donnerstag";
					else if (tag=="Donnerstag") tag="Freitag";
					else if (tag=="Samstag") tag="Sonntag";
					else if (tag=="Sonntag") tag="Montag";
					else if (tag=="Freitag") tag="Samstag";
				}
		
		}
	
		// Konstruktor der Klasse Uhr
	
		Uhr (String tagg, int stundee, int minutee, int sekundee) {
			tag = tagg;
			stunde = stundee;
			minute = minutee;
			sekunde = sekundee;
			System.out.println ("Konstruktor von uhr: " + tag + " : " + stunde + " : " + minute + " : " + sekunde);
		}
}

Gibts da irgendwelche Verbesserungsvorschläge?
 
Jetzt rein vom organisatorischen Standpunkt aus betrachtet hat sich folgender aufbau bewährt:

Java:
1.Klassendefinition // denke ich muss nicht erwähnt werden
2.Attribute
3.Konstruktoren
3.1 ggf. Innere Klassen
4.private Methoden
4.1 package sichtbare Methoden (protected)
5.Öffentliche Methoden

bei Aufzählungen könnte man ein Enum einsetzen

Java:
public enum Wochentage{

  Montad, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag, Sonntag;

  private Wochentage(){
      // eventueller Code hier
  }

}

und daraus folgernd ein switch verwenden

Java:
Wochentage day = Wochentage.Montag;

switch(day){
 
case Montag:
 //do some stuff
break;
case Dienstag:
 //do other stuff
break;

usw...usw..

}

desweiteren ist sowas unnötig und unübersichtlich

Java:
 Uhr (String tagg, int stundee, int minutee, int sekundee) {
            tag = tagg;
            stunde = stundee;
            minute = minutee;
            sekunde = sekundee;
            System.out.println ("Konstruktor von uhr: " + tag + " : " + stunde + " : " + minute + " : " + sekunde);
        }

man kann dies auch folgendermaßen machen

Java:
public Uhr(String tag, int stunde, int minute, int sekunde){
  this.tag = tag;
  this.stunde = stunde;
  this.minute = minute;
  this. sekunde = sekunde;

}

dabei fungiert
Code:
this
als Zeiger auf die Attribute deiner Klasse, also deine Instanzvariable.

zudem sollten die Attribute oder auch Member deiner Klasse , insofern du Sie nur innerhalb dieser Klasse nutzt als
Code:
private
deklariert sein, um ungewollte zugriffe von außerhalb zu vermeiden.

Man könnte noch weitergehen und sagen man erstellt Uhr als abstrakte Klasse oder Interface ( z.B Timeable ) und KuckucksUhr als eine Konkrete ( realisierte ) Klasse, So wäre es möglich verschiedene Grundfunktionen die eine Uhr implementieren muss oder soll, in der Abstraktion festzulegen , und die Art wie diese Uhr letztlich funktioniert in der Unterklasse zu realisieren.

Beispiele für konkrete Implementierungen wären z.B KuckucksUhr, BinärUhr, DigitalUhr, AnalogUhr usw.usw.
 
Zuletzt bearbeitet:

Zurück
Oben