# 2 TimeObjekte addieren



## Sindbad1983 (20. Okt 2004)

Hallo!

Ich möchte zu einer Zeitangabe Time t eine weitere Zeit hinzufügen bzw. addieren

also z.B. 1 Stunde, 3 min, 5 sec +
             2 Stunden, 5 min, 58 sec= 3 Stunden, 9 min und 3 sec

irgendwie funktioniert das aber nicht..!

in der main Methode fehlt ihm irgendeine Exception Behandlung oder so...!
Kann mir da bitte jemand helfen?


Das ist der Fehler:

46: unreported exception java.lang.Exception; must be caught or declared to be thrown
				Time t1=new Time(9,57,12);

Weiß jemand, was das heißt?




```
import java.lang.IllegalArgumentException;

public class Time{

	int hrs, min, sec;

	public Time(int hrs, int min, int sec) throws Exception{

		if((0<=min&&min<=59) && (0<=sec && sec<=59)){
			this.hrs=hrs;
			this.min=min;
			this.sec=sec;
		}
		else{
			throw new IllegalArgumentException();
		}
	}

	public void add(Time t){

		this.hrs=this.hrs+hrs;

		this.min=this.min+min;

		if(this.min>=60){
			this.min=this.min%60;
			hrs++;
		}
		this.sec=this.sec+sec;

		if(this.sec>=60){
			this.sec=this.sec%60;
			min++;
		}
	}

	public static void main(String [] args){

				Time t1=new Time(9,57,12);
				Time t2=new Time(8,43,58);
				t1.add(t2);

				System.out.println(t1);
		}

 }
```
Danke für eure Hilfe!


----------



## ugh_bough (20. Okt 2004)

Der Konstruktor deiner Time Klasse wirft eine Exception

```
throws IllegalArgumentException
```
die anzeigt, wenn ein Benutzer falsche Eingaben gemacht hat.
Falls das der Fall ist, soll dieser Fehler das Programm nicht einfach abbrechen, sondern z.B. dem Benutzer sagen, daß er neue Eingaben machen soll. Dazu solltest Du um die Instanziierung deiner Time Objekte einen Try & Catch Block machen.
Hier im Beispiel nur ein Hinweis als Verarbeitung.

```
public static void main(String [] args){
            try {
            Time t1=new Time(9,57,12);
            Time t2=new Time(8,43,58);
            t1.add(t2);
            }
            catch (Exception e)
            {
                      System.out.println("Falsche Zeitangaben an den Konstruktor eines TimeObjekts übergeben!");
            }

            System.out.println(t1);
      }
```


----------



## Roar (20. Okt 2004)

Sindbad1983 hat gesagt.:
			
		

> public Time(int hrs, int min, int sec) throws Exception{



wenn du angibst dass dein konstruktor eine exception wirft musst du sie natürlich auch abfangen, aber 1. brauchst du das throwws Exceptino niht angeben, da in dem konstruktor nur eine runtimeexception geworfen wird.
und 2. java.lang.IllegalArgumentException brauchst du nicht importieren


----------



## Sindbad1983 (20. Okt 2004)

Stimmt!
Es funktioniert!

Aber leider ist das Ergebnis nicht das gewünschte!


Time@7ced01
Drücken Sie eine beliebige Taste . . .


----------



## Roar (20. Okt 2004)

deine h,m und s werden nicht von alleine ausgegeben! das musst du schon selbst machen. du musst die methode toString() überschreiben.


----------



## ugh_bough (20. Okt 2004)

Das heisst, daß deine Klasse dann die folgende, zusätzliche Methode

```
public String toString()
{
    return this.hrs + ":" + this.min + ":" + this.sec;
}
```
haben muss.
...wenn ich mich nicht täusche.


----------



## Sindbad1983 (20. Okt 2004)

super..es funktioniert!

Aber wann muss ich die toString-Methode überschreiben?
Wie weiß ich das?
Sonst geht System.out.println auch oft...! :-(


Ich frag mich nur, warum das Ergebnis nicht stimmt?


```
public static void main(String [] args){


		try{
				Time t1=new Time(10,12,12);

				Time t2=new Time(12,12,12);
				t1.add(t2);
				System.out.println(t1);

		}
		catch(Exception e){
		System.out.println("Falsche Zeit");
		}



	}
```


Ausgabe:
202424
Drücken Sie eine beliebige Taste . . .


----------



## Sindbad1983 (20. Okt 2004)

So schaut meine aus:


```
public String toString(){

		String s="";

		s=s+hrs+min+sec;

		return s;
	}
```

 :lol: [/quote]


----------



## Roar (20. Okt 2004)

Sindbad1983 hat gesagt.:
			
		

> Aber wann muss ich die toString-Methode überschreiben?
> Wie weiß ich das?
> Sonst geht System.out.println auch oft...! :-(



1. weil println(Object o) die methode toString() nunmal aufruft
2. weil das i nder api steht
3. ja, weil viele klassen die toString() methode überschreiben


----------



## Roar (20. Okt 2004)

Sindbad1983 hat gesagt.:
			
		

> public void add(Time t){
> 
> this.hrs=this.hrs+hrs;
> 
> ...



die methode ist falsch, du benutzt ja das übergebene Time objekt gar nicht, sondern addierst nur die daten von der aktuellen instanz...


----------



## Sindbad1983 (20. Okt 2004)

ok..ich checks

aber die Ausgabe?


----------



## Roar (20. Okt 2004)

was is mit der ausgabe? die is falsch, weil die add methode falsch is


----------



## Sindbad1983 (20. Okt 2004)

ok..super

wir haben das zur gleichen Zeit gepostet..ich habs erst nachher gelesen!

Du bist spitze!
Danke!
Mein Abend ist gerettet! ;-)



```
public void add(Time t){

		this.hrs=this.hrs+t.hrs;

		this.min=this.min+t.min;

		if(this.min>=60){
			this.min=this.min%60;
			this.hrs++;
		}
		this.sec=this.sec+t.sec;

		if(this.sec>=60){
			this.sec=this.sec%60;
			this.min++;
		}

	}
```

....so natürlich!

Danke nochmal für deine Hilfe!!!!!
ciao,Tommy


----------

