Ausnahmen und Fehler

morphi79

Erfahrenes Mitglied
Hallo, ich schon wieder. Wieder ein paar Fragen. Diesmal betrifft es mehrere Ausnahmen, die ich in ein Script einbauen möchte. Dazu mal die kurze Aufgabe:

Ändern Sie die Klasse Fahrzeug so, dass ein Fahrzeug keine negativen
Geschwindigkeiten haben kann. Bei dem Versuch, ein Fahrzeug mit einer negativen Anfangsgeschwindigkeit zu erzeugen, soll der Konstruktor eine Ausnahme vom Typ FalscherWertException auslösen. Bei dem Versuch, die Geschwindigkeit eines Fahrzeugs nachträglich auf einen Wert kleiner Null zu verringern, soll die Methode beschleunigen() eine Ausnahme vom Typ NichtMoeglichException auslösen. Definieren Sie dazu die benötigten Ausnahmen und nehmen Sie die nötigen Ergänzungen an der Klasse Fahrzeug vor. (Die Ausnahmen müssen keine eigenen Variablen oder Methoden enthalten.) Ä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.
Geben Sie alle Java-Dateien zusammen in einem ZIP-Archiv ab.
Hinweise: Definieren Sie die Ausnahmen in eigenen Dateien. Geben Sie beim Übersetzen des Programms alle zugehörigen Quelltextdateien gleichzeitig als Argumente des Compiler-Aufrufs an.


Soweit so gut. Ich habe die Klassen Fahrzeug und FahrzeugTester erstellt. Diese sind soweit in Ordnung. Nun möchte ich in der Klasse Fahrzeug den ersten Punkt abarbeiten. Dies wäre die Ausnahme, dass keine negativen Geschwindigkeiten ein Fahrzeug haben kann. Wie kann ich am besten vorgehen?

Hier noch die zwei Klassen Fahrzeug und FahrzeugTester

Code:
public class Fahrzeug {
	private int geschwindigkeit;
 
	public Fahrzeug(int geschwindigkeit) {
this.geschwindigkeit = geschwindigkeit;
	}
 
	public int getGeschwindigkeit() {
return geschwindigkeit;
	}
 
	// negative Beschleunigungen verringern die Geschwindigkeit
	public void beschleunigen(int aenderung) {
geschwindigkeit += aenderung;
	}
}

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.");
}
	}
}

Kann ich hier einfach in der Klasse Fahrzeug nach dem Konstruktor eine Try Exception einfügen?
 
Zuletzt bearbeitet:
und wie mach ich das? Ich muss eine neue Klasse machen. Also

Code:
public class FalscherWertException extends Exception {

oder?

nach der klassendefinition kann doch dann z. B. Instanzvariablen, Konstruktoren, Methoden folgen.

kann ich nach dem Klammer anfangen mit meiner ausnahmeregelung?
 
Hi,

was genau willst du jetzt machen?

Willst du eine neue Art Exception generieren genauer gesagt eine für dich angepasste version erstellen oder willst du eine Exception behandeln oder willst du sie werfen, falls was nicht richtig läuft?

Für das erste:

public class MeineException extends Exception {
// jetzt könntest du hier variablen deklarieren
private int errorcode;
private String errormessage;

public MeineException(int code, String message) {
super(message);
this.errorcode=code;
this.message=message;
}

// überschreiben der toString methode
public String toString() {
return errorcode+":"+errormessage;
}

//falls du noch etwas überschreiben willst, hier kannst du es machen.
public String getErrorMessage() {
return this.errormessage;
}

public int getErrorCode() {
return this.errorcode;
}

}


Willst du sie jetzt verwenden machst du folgendes:

public void eineMethode() throws MeineException {
System.out.println("Ich tu jetzt was, nämlich meine exception werfen.");
throw new MeineException(1, "eine fehler mit dem code 1");
}


Eine exception abfangen:

public void test() {
try{
eineMethode();
}

catch (MeineExecption me) {
System.out.println("Hab meine Exception gefangen und zwar nur meine! ");
System.out.println("FehlerCode: "+me.getErrorCode());
System.out.println("Fehlernachricht: "+me.getErrorMessage());
System.out.println("Gesamt Message: "+me);

}

}


Ich hoffe das hilft dir weiter.

Gruss,

Torsten
 
torsch2711 hat gesagt.:
Hi,

was genau willst du jetzt machen?

Willst du eine neue Art Exception generieren genauer gesagt eine für dich angepasste version erstellen oder willst du eine Exception behandeln oder willst du sie werfen, falls was nicht richtig läuft?

So wie ich das sehe, soll ich eigene Exception generieren, die natürlich von Exception abgewandelt ist. Diese sollen in eigenen Dateien stehen.

Nun eben wollte ich meine Exception generieren. Für diesen Fall:
Ändern Sie die Klasse Fahrzeug so, dass ein Fahrzeug keine negativen

Geschwindigkeiten haben kann. Bei dem Versuch, ein Fahrzeug mit einer negativen Anfangsgeschwindigkeit zu erzeugen, soll der Konstruktor eine Ausnahme vom Typ FalscherWertException auslösen.

Dazu muss ich ja eine eigene Klasse generieren. Also
public class FalscherWertException extends Exception {

als nächstes muss ich die Instanzvariable deklarieren, oder?

int geschwindigkeit;

und wie gehts dann weiter?

 
Code:
if(geschwindigkeit < 0){
	throw new FalscherWertException 
			("Negative Geschwindigkeit"); //oder sonst ein Fehlertext
}

dafür muss die Methode in der das steht auch die Exception thrown also:

Code:
public void meineFunktion()throws FalscherWertException
{
... Hier jetzt zum Beispiel der if Block
}

Gruß Steff
 
Hallo!

Normalerweise sollte man davon absehen zu viele eigene Exceptions oder gar ganze eigene Exception Hierarchien in sein Domain Model einzuführen.... im JDK gibt's doch einen ganzen Haufen standardisierter Exception Typen... wie wär's an dieser Stelle denn z.Bsp. mit einer IllegalArgumentException ?

Gruß Tom
 
Thomas Darimont hat gesagt.:
Hallo!

Normalerweise sollte man davon absehen zu viele eigene Exceptions oder gar ganze eigene Exception Hierarchien in sein Domain Model einzuführen.... im JDK gibt's doch einen ganzen Haufen standardisierter Exception Typen... wie wär's an dieser Stelle denn z.Bsp. mit einer IllegalArgumentException ?

Gruß Tom

mh... wenn ich mir die Aufgabenstellung so durchlese, kann ich auch nirgendwo etwas entdecken, dass man eine eigene machen soll... es ist bestimmt auch einfacher, sich auf das zu beziehen, was schon da ist... was hat es denn mit der IllegalArgumentException auf sich, für was verwendet man diese?
 
Hallo!

Bei den "schicken" Java Klassen erkennt man die Funktionalität schon meißt am Namen. Die IllegalArgumentException hat folgende Beschreibung in der Java Doc:
Thrown to indicate that a method has been passed an illegal or inappropriate argument.

Gruß Tom
 

Neue Beiträge

Zurück