2 TimeObjekte addieren

Status
Nicht offen für weitere Antworten.

Sindbad1983

Top Contributor
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?



Code:
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

Mitglied
Der Konstruktor deiner Time Klasse wirft eine Exception
Code:
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.
Code:
   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);
      }
 
R

Roar

Gast
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

Top Contributor
Stimmt!
Es funktioniert!

Aber leider ist das Ergebnis nicht das gewünschte!


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

Roar

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

ugh_bough

Mitglied
Das heisst, daß deine Klasse dann die folgende, zusätzliche Methode
Code:
public String toString()
{
    return this.hrs + ":" + this.min + ":" + this.sec;
}
haben muss.
...wenn ich mich nicht täusche.
 

Sindbad1983

Top Contributor
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?

Code:
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

Top Contributor
So schaut meine aus:

Code:
public String toString(){

		String s="";

		s=s+hrs+min+sec;

		return s;
	}

:lol: [/quote]
 
R

Roar

Gast
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 ;)
 
R

Roar

Gast
Sindbad1983 hat gesagt.:
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++;
}
}

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

Roar

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

Sindbad1983

Top Contributor
ok..super

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

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


Code:
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
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben