Methoden UhrZeit

nikels

Mitglied
Hallo
Ich hab Hausaufgaben aufbekommen zum thema Methoden das Programm soll folgende Punkte erfüllen
Code:
Eine Zeitangabe besteht aus Stunden (0-23), Minuten (0-59) und Sekunden (0-59).
Definieren Sie eine Klasse ClockTime, die eine Zeitangabe mit diesen
Komponenten repräsentiert. Die Klasse bietet die folgenden Methoden an:
ClockTime()
· Default-Ctor, initialisiert die Zeit mit 00:00:00.
ClockTime(int h)
ClockTime(int h, int m)
ClockTime(int h, int m, int s)
· Custom-Ctors. Die ein, zwei oder drei int Parameter geben jeweils Stunden,
Stunden und Minuten, sowie alle drei Elemente vor. Die Wertebereiche der
Parameter sind nicht eingeschränkt. Sie können beliebig groß und auch
negativ sein. Das heißt, dass Sekunden in Minuten und Minuten in Stunden
überlaufen können, und dass nach 23:59:59 wieder 00:00:00 folgt.
ClockTime(ClockTime ct)
· Copy-Ctor, initialisiert das neue Objekt mit der gleichen Zeit wie ct.
Boolean same(ClockTime ct)

· Akzeptiert als Argument ein anderes ClockTime Objekt und stellt fest, ob
beide Zeiten gleich sind. Das Ergebnis ist ein boolean Wert (true = beide
gleich, false = nicht gleich).
void add(int s)
· Akzeptiert eine Anzahl Sekunden s und addiert s zur Zeit. Zeiten laufen von
23:59:59 nach 00:00:00 über. Die Sekundenzahl s kann auch negativ sein; in
diesem Fall wird der Sekundenbetrag subtrahiert.
int diff(ClockTime ct)
· Akzeptiert ein anderes ClockTime Objekt ct als Argument und liefert den
Zeitunterschied zwischen dem Zielobjekt und ct zurück. Der Zeitunterschied
wird in Sekunden gemessen und ist immer positiv. Zwei Beispiele:
Der Zeitunterschied zwischen 00:00:00 und 00:00:01 ist 1 Sekunde.
Der Zeitunterschied zwischen 00:00:01 und 00:00:00 ist 86399 Sekunden.
int getSeconds()
· Liefert die Anzahl Sekunden s mit 0 ≤ s ≤ 59.
int getMinutes()
· Liefert die Anzahl Minuten m mit 0 ≤ m ≤ 59.
int getHours()
· Liefert die Anzahl Stunden h mit 0 ≤ h ≤ 23.

Was ich bisher habe.
Java:
public class HauptProg {
	public static void main (String[] args){
		
		ClockTime c = new ClockTime(22,14,15);
		
		System.out.println("Zei: " +c.getStunden());
	}
}

Java:
public class ClockTime {
    
// Attribute 
  
  private int stunden;
  
  private int minuten;
    
  private int sekunden;
 
// Konstruktoren  
    
    public ClockTime() {
         stunden = 0;
         minuten = 0;
         sekunden = 0;
    }
    
    public ClockTime(int stunden, int minuten, int sekunden) {     
     this.stunden = stunden;
     this.minuten = minuten;
     this.sekunden = sekunden;
    }
// get- und set-Methoden 
 
  public int getStunden() {
    return stunden;
  }
 
  public int getMinuten() {
    return minuten;
  }
 
  public int getSekunden() {
    return sekunden;
  }
 
  public void setClockTime(int stunden, int minuten, int sekunden) {
    this.stunden = stunden;
    this.minuten = minuten;
    this.sekunden = sekunden;
  }
 
}

Muss mein nächster Schritt etwa so aussehen ?
Java:
	//Konstruktor
	public ClockTime(int h, int m,int s) {
	stunden = h;
	minuten = m;
	sekunden = s;
		
	}
	//Konstruktor
	public ClockTime(int h, int m) {
	stunden = h;
	minuten = m;
	sekunden = 00 ;
		
	}
	//Konstruktor
	public ClockTime(int h) {
	stunden = h;
	minuten = 00;
	sekunden = 00;
		
	}

Damit wenn ich nur 1 Zahl ausgeben will, diese als Stunden gedeutet wird und min/sek mit 00 .
 

faetzminator

Gesperrter Benutzer
Ich schreib das immer etwa so:
Java:
public Foo(int x, int y, int z) {
    this.x = x;
    this.y = y;
    this.z = z;
}

public Foo(int x, int y) {
    this(x, y, 0);
}

public Foo(int x) {
    this(x, 0);
}

public Foo() {
    this(0);
}
Ich würd diese Defaultwerte sogar noch in Konstanten auslagern und so referenzieren.
War das die Frage?
 
T

TryToHelp

Gast
Ja ;-)

Mhh ja man kann es auch so machen wie faetzminator geschildert, aber es geht auch so wie du es geschildert hast. Der Vorteil von faetzminator Variante ist, das wenn du etwas generelles ändern willst, z.B. immer +5 Stunden, musst du es nur einmal ändern und nicht 4 mal ;-)
 

Landei

Top Contributor
Kleiner Tipp, gewöhne dir sowas gar nicht erst an: [c]sekunden = 00;[/c]. Zum einen steht sowieso nur 0 in der Variable, zum anderen schau mal, was [c]System.out.println(011);[/c] ausgibt...

Du kannst Zahlen bei der Ausgabe oder Umwandlung in einen String so formatieren, dass sie führenden Nullen bekommen, aber in einer int-Variable gibt es das nicht. Ich glaube, die entsprechende Formatierung war [c]System.out.printf("%02d", sekunden);[/c] oder so ähnlich...
 
Zuletzt bearbeitet:

nikels

Mitglied
ok
Java:
public class ClockTime {
    
// Attribute 
  
  private int stunden;
  private int minuten;
  private int sekunden;
 
// Konstruktoren  
    
    public ClockTime(int h, int m, int s) {
	    this.h = stunden;
	    this.m = minuten;
	    this.s = sekunden;
	}
	 
	public ClockTime(int h, int m) {
	    this(h, m, 0);
	}
	 
	public ClockTime(int h) {
	    this(h, 0);
	}
	 
	public ClockTime() {
	    this(0);
	}
    
// get- und set-Methoden 
 
  public int getStunden() {
    return stunden;
  }
 
  public int getMinuten() {
    return minuten;
  }
 
  public int getSekunden() {
    return sekunden;
  }
 
  public void setClockTime(int stunden, int minuten, int sekunden) {
    this.stunden = stunden;
    this.minuten = minuten;
    this.sekunden = sekunden;
  }
  
}

Wieso krieg ich hier eine Fehlermeldung ?
Wie bekomme ich die übergänge von 60 min in 1std und 24:00:00 in 00:00:00 usw ?
 

Landei

Top Contributor
Fehler, weil du die Variablem im Konstruktor verdreht hast: [c]this.sekunden = s;[/c] u.s.w ist richtig.

Für das "Überlauf"-Problem würde ich innerhalb der Klasse nur die Gesamtsekunden (Stunden und Minuten eingerechnet) speichern: [c]sekunden= (3600*h+60*m+s) % 86400;[/c]. Dann kannst du uneingeschränkt mit diesem einen Wert rechnen, nur bei der Ausgabe musst du wieder "zurückrechnen" -> Stichwort Ganzzahldivision und Modulo-Operator.
 
Zuletzt bearbeitet:
T

TryToHelp

Gast
Oder als alternative sowas
Java:
if(minuten>60){
   minuten=minuten-60;
   stunden++;
}
bzw
Java:
int extrastunden=minuten/60;
minuten=minuten%60;
stunden=stunden+extrastunden;
 

Oben