# Exception



## steffen (25. Jan 2005)

"guten" morgen :bahnhof: 

ich habe folgendes problem und komme net weiter: ich habe ein klasse datum geschrieben und soll nun dazu 
eine ausnahmebehandlung machen. vorweg: ich weiß, es gibt schon viele beiträge dazu und sogar code-schnipsel, aber die helfen mir net wirklich weiter momentan, da ich mit der objektorientierung etc. eh noch meine probleme habe. also im anhang meine klasse datum und hier die aufgabenstellung: ich soll drei ausnahmeklassen definieren (?). eine für die eingabe eines falschen tages, eine bei monat/und jahr. jede dieser klassen soll den eingegebenen falschen wert speichern können und eine zugriffsmethode darauf haben (?). vererbung soll benutzt werden, da sich nur die namen unterscheiden (?). 
meine klasse: 
	
	
	
	





```
class Datum {

	protected int tag = 0;
	protected int monat = 0;
	protected int jahr = 0;

	public static void main(String[]args) {

		System.out.println("Eingabe eines Datums!");

		Datum d1 = setDatum();
		ausgabeDat(d1);

		System.out.println("Eingabe eines weiteren Datums zum Vergleich!");

		Datum d2 = setDatum();
		ausgabeDat(d2);

		int differenz = d1.Vergleich(d2);
		ausgabeDiff(differenz);
	}//main

	//Konstruktor zum Erzeugen eines Datums
	public Datum(int day, int month, int year) {

		this.tag = day;
		this.monat = month;
		this.jahr = year;
	}
	//Methode zum Erzeugen eines neuen Objektes vom Typ Datum
	static Datum setDatum() {

		int day, month, year;

		day = abfrage("Tag",1,31);
		month = abfrage("Monat",1,12);
		year = abfrage("Jahr",1900,2500);
		return new Datum(day,month,year);
	}
	//Methode zum Abfragen & zum Einlesen eines Datums
	static int abfrage(String wort,int anfang,int ende) {

		int wert;

		System.out.println("Bitte " + wort + " eingeben! Wert zwischen " +
		anfang + " und " + ende + "!");
		wert = EM02.liesInt();

		while(wert < anfang || wert > ende) {

			System.out.println("Falsche Eingabe! Bitte gueltigen Wert fuer "
			+ wort + " eingeben!");
			wert = EM02.liesInt();
		}
			return wert;
	}
	//Methode um Datum für Vergleich zu holen
	public int getJahr() {

		return this.jahr;
	}
	//Methode zur Ausgabe von Eingabedatum
	static void ausgabeDat(Datum date){

		System.out.println("Das Datum lautet: " + date.toString() + "\n");
	}
	//Methode zur Ausgabe der Jahresdifferenz 2er Eingabedaten
	static void ausgabeDiff(int differenz) {

		System.out.println("Es liegen " + differenz + " Jahre zwischen den Daten");
		System.out.println();
	}
	//Methode toString zum Erzeugen der Ausgabeform TT.MM.JJJJ
	public String toString() {

		return this.tag + "." + this.monat + "." + this.jahr;
	}
	//Methode zum Vergleich zweier Eingabedaten
	public int Vergleich(Datum neu) {

		int diffJahr = this.jahr - neu.getJahr();

		if(this.jahr > neu.getJahr()) {

			return diffJahr;

		} else {

			return -diffJahr;
		}
	}

}//class Datum2
```

so..nun werde ich sicher meine abfrage-methode erstmal ändern müssen in 3 abragen (tag, monat, jahr) oder? und dann würde ich etwas wie eine WrongDayException, WrongMonthException und WrongYearException brauchen? Ich Verstehe nicht, wie ich diese 3 "Ausnahmeklassen" definieren soll und wo. Ich muss sicher auch irgendwie eine Ausnahme "werfen", nur an welcher Stelle? Letzte Frage: muss ich try-catch benutzen und wenn ja wo?

Da ich die Aufgabe bald abgeben muss, wäre ich sehr dankbar für eure hilfe
steff


----------



## foobar (25. Jan 2005)

> Ich muss sicher auch irgendwie eine Ausnahme "werfen", nur an welcher Stelle?



Hier:

```
System.out.println("Falsche Eingabe! Bitte gueltigen Wert fuer "
```



> Ich Verstehe nicht, wie ich diese 3 "Ausnahmeklassen" definieren soll und wo.





```
class WrongDayException extends Exception
{
  public WrongDayException(String message)
  {
      super( message );
   }

  public WrongDayException(Throwable cause)
  {
      super( cause);
   }

}
```



> Letzte Frage: muss ich try-catch benutzen und wenn ja wo?


Entweder stellst du einen Catcher auf oder du wirfst die Exception weiter.


----------



## Gast (25. Jan 2005)

ok..danke erstmal für die flottoe antwort..allerdings muss ich zugeben, dass ich nicht soo viel weiter komme..ich versuche erstmal etwas code-ähnliches zu schreiben jetzt und meld mich dann später damit nochmal wieder, dann sieht man vielleicht genauer, WAS ich alles nicht verstehe..danke also für die ersten tipps (freu mich über weitere) ;-)


----------



## steffen (25. Jan 2005)

ich komm nicht weiter.. hier einige code-schnipsel, danach die fragen:

```
class WrongDatumException extends Exception
{
  public WrongDatumException(String message)
  {
      super( message );
   }
class WrongDayException extends WrongDatumException
{
  public WrongDayException(String message)
  {
      super( message );
   }
```
..das gleiche für Monat und Jahr. Dann hätte ich als Oberklasse WrongDatumException und
drei Unterklassen für falsche Eingabe von Tag Monat Jahr. Was müsste ich denn in die Klammern für message schreiben??? Muss dann mein setDatum (zum erzeugen eines Datums) oder die methode abfrage die ausnahme werfen? und wie? so?:


```
static int abfrage(String wort,int anfang,int ende) throws WrongDataumException {...}
```

muss ich denn überhaupt in meiner klasse datum etwas ändern?

verzweifelt: steffen..


----------



## mic_checker (25. Jan 2005)

steffen hat gesagt.:
			
		

> drei Unterklassen für falsche Eingabe von Tag Monat Jahr. Was müsste ich denn in die Klammern für message schreiben???


Ich schätze mal die exakte Fehlermeldung - Der User muss ja wissen was falsch gelaufen ist.


----------



## bygones (25. Jan 2005)

ich würde nicht noch unterklassen erstellen - mach eine WrongDateException und die bekommt dann als String pararmeter den Fehler einfach mit...

also "Falscher Tag" oder "Falsches Jahr"

für jede Möglichkeit eine eigene Klasse zu erstellen halte ich für zu viel des Guten


----------



## Steffen (25. Jan 2005)

Ein freundliches Danke zwischendurch für eure tipps! Bin noch dabei, poste später mein neues Ergebnis..


----------

