Ausnahmen und Fehler

Du hast Wagen im try deklariert. Außerhalb ist es dann nicht sichtbar:
Code:
...
//Achtung hier etwas geändert
    Fahrzeug wagen;
    try {
        wagen = new Fahrzeug(start);
...
Edit: Da Du die Exception abfängst, solltest Du Dir überlegen, wie Du wagen im Catch-Block initialisierst, damit Dir später nicht eine NullPointerException um die Ohren fliegt.
 
Zuletzt bearbeitet:
hpvw hat gesagt.:
Du hast Wagen im try deklariert. Außerhalb ist es dann nicht sichtbar:
Code:
...
//Achtung hier etwas geändert
Fahrzeug wagen;
try {
wagen = new Fahrzeug(start);
...
Edit: Da Du die Exception abfängst, solltest Du Dir überlegen, wie Du wagen im Catch-Block initialisierst, damit Dir später nicht eine NullPointerException um die Ohren fliegt.
Code:
public class FahrzeugTester {
 private static void test(int start) {
		int[] aenderungen = { 30, 50, -90, 30, -80 };
//Achtung hier etwas geändert
		Fahrzeug wagen;
 try {
			wagen = new Fahrzeug(start);
		} catch (FalscherWertException fwe) {
			 // Hier kannst du jetzt auf den Fehler reagieren zum Beispeil:
			System.out.println("Es wurde eine negative Geschwindigkeit eingeben");
			// Du kannst auch die Fehlermessage ausgeben lassen sollte aber nur für Debug zwecke genutzt werden
			System.err.println(fwe);
		}
//bis hier
		for (int i = 0; i < aenderungen.length; i++) {
	 System.out.println("Ändern der Geschwindigkeit um"+aenderungen[i]);
// Achtung hier etwas geändert
			try {
				wagen.beschleunigen(aenderungen[i]);
			} catch (FalscherWertException fwe) {
			   // Hier kannst du jetzt auf den Fehler reagieren zum Beispeil:
			System.out.println("Es wurde eine negative Geschwindigkeit eingeben");
			// Du kannst auch die Fehlermessage ausgeben lassen sollte aber nur für Debug zwecke genutzt werden
			System.err.println(fwe);
			}
// bis hier
			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.");
  }
}
}
wo wird dann die Variable wagen initialisiert?
Code:
FahrzeugTester.java:20: variable wagen might not have been initialized
wagen.beschleunigen(aenderungen[i]);
^
FahrzeugTester.java:21: exception FalscherWertException is never thrown in body
of corresponding try statement
} catch (FalscherWertException fwe) {
^
FahrzeugTester.java:28: variable wagen might not have been initialized
System.out.println("Aktuelle Geschwindigkeit: " + wagen.getGeschwin
digkeit());
^
3 errors
 
Zuletzt bearbeitet:
Was mir gerade auffällt:
Es ist ja ziemlich nutzlos, einen Wagen zu beschleunigen, der bereits falsch initialisiert wurde, daher könnte man auch sämtliche Operationen in dem selben try-catch-Block vornehmen:
Code:
public class FahrzeugTester {
    private static void test(int start) {
        int[] aenderungen = { 30, 50, -90, 30, -80 };

        try {
            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());
            }
        } catch (FalscherWertException fwe) {
            // Hier kannst du jetzt auf den Fehler reagieren zum Beispeil:
            System.out.println("Es wurde eine negative Geschwindigkeit eingeben");
            // Du kannst auch die Fehlermessage ausgeben lassen sollte 
            // aber nur für Debug zwecke genutzt werden
            System.err.println(fwe);
        }
    }
 
    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.");
        }
    }
}
 
stimmt. jetzt funkt es. allerdings muss ich noch irgendwo einen fehler drin haben, denn:

Code:
Beginn des Tests mit Startgeschwindigkeit 0
?ndern der Geschwindigkeit um30
Aktuelle Geschwindigkeit: 30
?ndern der Geschwindigkeit um50
Aktuelle Geschwindigkeit: 80
?ndern der Geschwindigkeit um-90
Aktuelle Geschwindigkeit: -10
?ndern der Geschwindigkeit um30
Aktuelle Geschwindigkeit: 20
?ndern der Geschwindigkeit um-80
Aktuelle Geschwindigkeit: -60
Test mit Startgeschwindigkeit 0 beendet.
Beginn des Tests mit Startgeschwindigkeit 10
?ndern der Geschwindigkeit um30
Aktuelle Geschwindigkeit: 30
?ndern der Geschwindigkeit um50
Aktuelle Geschwindigkeit: 80
?ndern der Geschwindigkeit um-90
Aktuelle Geschwindigkeit: -10
?ndern der Geschwindigkeit um30
Aktuelle Geschwindigkeit: 20
?ndern der Geschwindigkeit um-80
Aktuelle Geschwindigkeit: -60
Test mit Startgeschwindigkeit 10 beendet.
Beginn des Tests mit Startgeschwindigkeit -20
Es wurde eine negative Geschwindigkeit eingeben
FalscherWertException: Geschwindigkeit ist negativ
Test mit Startgeschwindigkeit -20 beendet.
Beginn des Tests mit Startgeschwindigkeit 200
?ndern der Geschwindigkeit um30
Aktuelle Geschwindigkeit: 30
?ndern der Geschwindigkeit um50
Aktuelle Geschwindigkeit: 80
?ndern der Geschwindigkeit um-90
Aktuelle Geschwindigkeit: -10
?ndern der Geschwindigkeit um30
Aktuelle Geschwindigkeit: 20
?ndern der Geschwindigkeit um-80
Aktuelle Geschwindigkeit: -60
Test mit Startgeschwindigkeit 200 beendet.


Negative Werte werden nicht berechnet, das ist in Ordnung. Allerdings werden alle Werte (unabhängig von den Anfangswerten) mit einem Wert von Null berechnet.

?

Liegt es an diesem hier

Code:
 for (int i = 0; i < startwerte.length; i++)
 
Die Klasse Fahrzeug sieht noch genauso aus

Code:
public class Fahrzeug {
	private int geschwindigkeit;
	
	public Fahrzeug(int geschwindigkeit) throws FalscherWertException{ 
	if(geschwindigkeit < 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;
   }
	
}
 
Hallo,

die Variable geschwindigkeit in der Klasse Fahrzeug wird nicht auf den Startwert gesetzt.

So klappt es:
Code:
public Fahrzeug(int geschwindigkeit) throws FalscherWertException
  { 
   	if(geschwindigkeit < 0)
  	{ 	 
   		throw new FalscherWertException("Geschwindigkeit ist negativ");
  		//gibt es Ausnahmeregel FalscherWertException
   	} else {
  		this.geschwindigkeit  = geschwindigkeit;
  	}
  }
 
Merci euch allen, vielen Dank. Es hat alles geklappt.


Diese Aufgabe muss ich mir nochmal ansehen, mit den Ausnahmen das peil ich immer noch nicht.

THX!
 
Ich habe nun die Aufgabe wieder vom Prof. bekommen. Nun hat er mir diese Aufgabe nicht bewertet und mir folgende Sachen bemängelt:

- Sie haben eine neue Methode setGeschwindigkeit() (die nirgends
benutzt wird) eingeführt, hätten die Exception-Erzeugung aber
stattdessen in beschleunigen() ergänzen sollen. Dadurch
findet das Werfen der NichtMoeglichException im Test nicht statt und
es treten negative Geschwindigkeiten auf.

- In der Methode test() fehlt das Abfangen der NichtMoeglichException,
die eigentlich (s.o.) bei einzelnen Geschwindigkeitsänderungen
auftreten können sollte. Dabei sollten die Exceptions in jedem
einzelnen Schleifendurchlauf und nicht für die Schleife insgesamt
abgefangen werden, so dass der Test auch nach einer unzulässigen
Änderung noch fortgesetzt würde.

- Eine FalscherWertException, die ja nur von einem unzulässigen
Startwert beim Konstruktoraufruf ausgelöst werden kann, sollte
dagegen innerhalb test() nicht abgefangen sondern erst in main()
behandelt werden.


Ähm... ich brauch noch einmal eure Hilfe....

Nochmal die Klassen im jetzigen Zusand:

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

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

Code:
public class Fahrzeug {
	private int geschwindigkeit;
	
	public Fahrzeug(int geschwindigkeit) throws FalscherWertException{ 
	if(geschwindigkeit < 0){ 	 
		throw new FalscherWertException("Geschwindigkeit ist negativ");//gibt es Ausnahmeregel FalscherWertException
	} else
   {
	  this.geschwindigkeit = geschwindigkeit;
   }
	}
	
	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;
   }
	
}

Code:
public class FahrzeugTester {
	private static void test(int start) {
		int[] aenderungen = { 30, 50, -90, 30, -80 };
		try {
			Fahrzeug wagen = new Fahrzeug(start);
			for (int i = 0; i < aenderungen.length; i++) {
				System.out.println("Aendern der Geschwindigkeit um "
						+ aenderungen[i]);
				wagen.beschleunigen(aenderungen[i]);
				System.out.println("Aktuelle Geschwindigkeit: "  
						+ wagen.getGeschwindigkeit());
			}
		} catch (FalscherWertException fwe) {
			// Hier kann man jetzt auf den Fehler reagieren zum Beispeil:
			System.out.println("Es wurde eine negative Geschwindigkeit eingeben");
			// Man kann auch die Fehlermessage ausgeben lassen sollte 
			// aber nur für Debug zwecke genutzt werden
			// System.err.println(fwe);
		}
	}
 
	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:
Zurück