Ausnahmen und Fehler

steff aka sId hat gesagt.:
Ja genau jetzt hastes verstanden glaub ich *g*
Gruß Steff
ich hoffe mal..... nur eine Sache bei der ich gerade überlege....

nachträgliche Änderung der Geschwindigkeit eines Fahrzeugs auf einen Wert kleiner 0...

wie kann ich das realisieren?
 
Zum Beispiel über einen setter:
Code:
public void setGeschwindigkeit(int neueGeschwindigkeit() throws FalscherWertException{
   if (neueGeschwindigkeit < 0){
      throw FalscherWertException("Die neue Geschwindigkeit ist negativ!");
   } else {
     this.geschwindigkeit = neueGeschwindigkeit;
   }
}
in der Klasse Fahrzeug.
Gruß Steff
 
steff aka sId hat gesagt.:
Zum Beispiel über einen setter:
Code:
public void setGeschwindigkeit(int neueGeschwindigkeit() throws FalscherWertException{
if (neueGeschwindigkeit < 0){
throw FalscherWertException("Die neue Geschwindigkeit ist negativ!");
} else {
this.geschwindigkeit = neueGeschwindigkeit;
}
}
in der Klasse Fahrzeug.
Gruß Steff

Also muss die Klasse Fahrzeug so aussehen
Code:
public class Fahrzeug {
	private int geschwindigkeit;
 
	public Fahrzeug(int geschwindigkeit) throws FalscherWertException{ //Aufruf der Exception FalscherWertException in einer eigenen Klasse FalscherWertException
	if(geschwindigkeit < 0){ 	 //wenn Geschwindigkeit kleiner 0
		throw new FalscherWertException("Geschwindigkeit ist negativ");//gibt es Ausnahmeregel FalscherWertException
	}
	}
 
	public int getGeschwindigkeit() {
return geschwindigkeit;
	}
 
	public void setGeschwindigkeit(int neueGeschwindigkeit) throws NichtMoeglichException{
	if (neueGeschwindigkeit < 0){
	 throw new NichtMoeglichException("Die neue Geschwindigkeit ist negativ!");
	} else {
		this.geschwindigkeit = neueGeschwindigkeit;
	}
}
	// negative Beschleunigungen verringern die Geschwindigkeit
	public void beschleunigen(int aenderung){
	geschwindigkeit += aenderung;
}
 
}

Die Klassen FalscherWertException und NichtMoeglichException so oder?

FalscherWert
Code:
public class FalscherWertException extends Exception { //Klasse FalscherWertException erstellen
public FalscherWertException( String ErrorMessage ){ //Konstruktor FalscherWertException generieren
super(ErrorMessage);
}
public FalscherWertException(){
}
}

NichMoeglichException
Code:
public class FalscherWertException extends Exception { //Klasse FalscherWertException erstellen
public FalscherWertException( String ErrorMessage ){ //Konstruktor FalscherWertException generieren
super(ErrorMessage);
}
public FalscherWertException(){
}
}


Nun müssen doch nur noch die Ausnahmen abgefangen werden, richtig?
 
Korekt. Du solltest bei der Funktion beschleunigung noch abfangen das die Geschwindigkeit da nicht negativ werden kann.

Gruß Steff
 
steff aka sId hat gesagt.:
Korekt. Du solltest bei der Funktion beschleunigung noch abfangen das die Geschwindigkeit da nicht negativ werden kann.

Gruß Steff

genau, das ist der zweite Teil der aufgabe.
Ändern Sie die Klasse FahrzeugTester so, dass auftretende Ausnahmen abgefangen werden. Die Methode test() soll in jedem einzelnen Schritt eines Tests auftretende Ausnahmen behandeln, indem sie eine entsprechende Fehlermeldung ausgibt und den laufenden Test dann fortsetzt. Die Methode test() soll aber keine Ausnahmen behandeln, die durch ungültige Anfangsgeschwindigkeiten ausgelöst werden. Letztere sollen von der Methode main() behandelt werden. Auch hier soll eine entsprechende Fehlermeldung
ausgegeben und dann der Test mit dem nächsten Startwert fortgesetzt werden. Die
Ausgaben der aktuellen Geschwindigkeit nach einer Geschwindigkeitsänderung
sowie die Ausgabe der Meldung über das Ende des Tests mit einer bestimmten Anfangsgeschwindigkeit sollen auch nach dem Auslösen einer Ausnahme gemacht
werden.

Aufgefangen wird mit try und catch. Aber wo soll ich das Try in FahrzeugTester.java hinsetzen?
Code:
public class FahrzeugTester {
	private static void test(int start) {
 int[] aenderungen = { 30, 50, -90, 30, -80 };
 
 Fahrzeug wagen = new Fahrzeug(start);
 for (int i = 0; i < aenderungen.length; i++) {
	 System.out.println("Ändern der Geschwindigkeit um "
		  + aenderungen[i]);
	 wagen.beschleunigen(aenderungen[i]);
	 System.out.println("Aktuelle Geschwindigkeit: "
		  + wagen.getGeschwindigkeit());
 }
	}
	
	public static void main(String[] args) {
 int[] startwerte = { 0, 10, -20, 200 };
 
 for (int i = 0; i < startwerte.length; i++) {
	 System.out.println("Beginn des Tests mit Startgeschwindigkeit "
		  + startwerte[i]);
	 test(startwerte[i]);
	 System.out.println("Test mit Startgeschwindigkeit "
		  + startwerte[i] + " beendet.");
 }
	}
}
 
Zuletzt bearbeitet:
also du musst try und catch um deine funktionen legen welche die Exceptions werfen.

Sprich du hast bei deinem Fahrzeug-konstruktor eine exception geworfen also:

try {
Fahrzeug bmw=new Fahrzeug(start);
}
catch (FalscherWertException fwe) {
system.out.println("Es wurde ein falscher geschwindigkeitswert übergeben! Exception Message: "+fwe);
}

oder bei setGeschschwindigkeit():

try {
bmw.setGeschwindigkeit(30);
}
catch (NichtMoeglichException nme) {
//s.o.
....
}


somit hast du die exceptions abgefangen.

Du kannst auch das try ganz vorne hin schreiben und zum schluss die catch bedingungen hintereinander:

try{




}
catch(FalscherWertException fwe) {
...
}
catch(NichtMoeglichException nme) {

...

}


Gruss,

Torsten
 
steff aka sId hat gesagt.:
Dann musst du doch die eigene Exception benutzen und nicht die IllegalArgumentException. Wenn das so die Aufgabenstellung ist.
Gruß Steff

Dann sollte er aber den Hinweis seinem Lehrer geben das die Aufgabe dumm ist und zu
schlechtem Code verleitet.

grüsse
 
Christian Fein hat gesagt.:
Dann sollte er aber den Hinweis seinem Lehrer geben das die Aufgabe dumm ist und zu
schlechtem Code verleitet.

grüsse


Hmmm, vielleicht sollen die Schüler auch nur ein Verständnis dafür bekommen, wie die Zusammenhänge sind. Ich meine es ist ja nicht schlimm und zeugt auch nicht zwangsläufig von schlechtem Code, wenn man seine eigenen Exceptions erstellt. Dann wären viele Bibliotheken-ersteller dumm, weil sie ihre eigenen Exceptions erstellen ;)


Gruss,
Torsten
 
torsch2711 hat gesagt.:
Hmmm, vielleicht sollen die Schüler auch nur ein Verständnis dafür bekommen, wie die Zusammenhänge sind. Ich meine es ist ja nicht schlimm und zeugt auch nicht zwangsläufig von schlechtem Code, wenn man seine eigenen Exceptions erstellt. Dann wären viele Bibliotheken-ersteller dumm, weil sie ihre eigenen Exceptions erstellen ;)

Natürlich ist es nicht schlimm seine eigene Exception zu erstellen. Aber eine Exception zu erstellen die genau das selbe aussagt wie eine bestehende (nur in deutsch *autsch*) ist wirklich schlechter Code.
IllegalArgumentException mit einer FalscherWertException zu kopieren ist einfach falsch und schlecht.
Wenn ich Flatfiles parse und schreibe meine eigene ParserException die sich sinnvoll verhält dann ist das was anderes.
 
Zurück