Seite 2 von 6

Re: Übung 11 online!!!!

Verfasst: 19. Jan 2008 15:35
von Jo(h)nny
mal ne ganz andere frage, habt ihr auch so viele set- und get-methoden??? also ich hab insgesammt ca. 15-16 set-get- methoden :D es steht ja:
Wichtig: Halten Sie sich bitte an die Prinzipien der Kapselung und arbeiten Sie mit get- und set-
Methoden.

Re: Übung 11 online!!!!

Verfasst: 20. Jan 2008 00:40
von ChristianK
Ja geht ja gar nicht anders, wenn man Kapselung einhalten will... Aber ich finde die Schreibarbeit ist bei der Hausübung schon ziemlich extrem... Also inhaltlich hält sich das ganze doch stark in Grenzen, der Nutzen erschließt sich mir insofern auch nicht... Exceptions kann man auch verstehen ohne stundenlang irgendwelche Funktionen zu tippen...

Re: Übung 11 online!!!!

Verfasst: 20. Jan 2008 19:16
von DerWildeKaiser
Ich bin zwar jetzt mit der Aufgabe fertig und es funktioniert auch eigentlich alles, nur ich hab einen Fehler in der Test.java:

Code: Alles auswählen

private static void testflight() throws Exception {
		[...]
		try {
			test.gearDown();
		} catch (AirplaneException e) {
			System.out.println(e.getMessage());
		} 
		[...]
	}
Eclipse sagt mir:
Unreachable catch block for AirplaneException. This exception is never thrown from the try statement body

Is ja auch ganz richtig, denn wo soll denn gearDown bitteschön eine AirplaneException werfen? Bei mir kann die höchstens ne AirborneComputerException werfen (wenn der Autopilot aktiviert ist und die Funktion aufgerufen wird).
Fehler im Template oder von mir falsch implementiert?

Edit: Hat sich erledigt... Weiß jetzt wann ich die Exception werfen muss... :oops:

Re: Übung 11 online!!!!

Verfasst: 20. Jan 2008 22:23
von Jo(h)nny
hatte ich auch zuerst ma, hab dann sogar die exception, die der catch-block abfängt geändert..... und dann noch ma die aufgabenstellung durchgelesen:)

Re: Übung 11 online!!!!

Verfasst: 22. Jan 2008 01:48
von Stumpf.Alex
Das ist ein Rundungsfehler, da du wahrscheinlich nur Double nach int castet,
ich hingegen benutze Math.round() und caste long nach int.
Man kann auch double nach int casten und dabei 4079 erhalten. Mann muss halt darauf achten, dass alle Rechenschritte mit double gemacht werden und dann das Ergebnis nur noch gecastet wird. Obwohl es ziemlich egal ist, aber beim aufrunden kann dem Flugzeug potentiell der Sprit zu früh ausgehen. :wink:

Re: Übung 11 online!!!!

Verfasst: 22. Jan 2008 22:53
von Krümelmonster
@Stump.Alex:
Das stimmt wohl, habe es auch wieder geändert.

Eine andere Frage:
Fügen Sie außerdem eine Überprüfung hinzu, ob das Fahrwerk bei einer Höhe über 500 ein-
gefahren ist und ab einer Höhe unter 300 ausgefahren ist. Wenn nicht, so werfen Sie eine
AirplaneException mit entsprechender Fehlermeldung.
Soll es trotzdem noch möglich sein, das Fahrwerk ein- oder auszufahren oder soll nur eine Exception geworfen werden
("Kann Fahrwerk nicht einfahren, da Höhe < 300" oder "Kann Fahrwerk nicht ausfahren, da Höhe>500") falls versucht wird,
das Fahrwerk ein- oder auszufahren?
Anders gesagt:
Soll erst der neue Zustand des Fahrwerks gesetzt und dann ggf. eine Exception geworfen werden oder umgekehrt?

Re: Übung 11 online!!!!

Verfasst: 23. Jan 2008 10:12
von guido
Krümelmonster hat geschrieben:@Stump.Alex:
Das stimmt wohl, habe es auch wieder geändert.

Eine andere Frage:
Fügen Sie außerdem eine Überprüfung hinzu, ob das Fahrwerk bei einer Höhe über 500 ein-
gefahren ist und ab einer Höhe unter 300 ausgefahren ist. Wenn nicht, so werfen Sie eine
AirplaneException mit entsprechender Fehlermeldung.
Soll es trotzdem noch möglich sein, das Fahrwerk ein- oder auszufahren oder soll nur eine Exception geworfen werden
("Kann Fahrwerk nicht einfahren, da Höhe < 300" oder "Kann Fahrwerk nicht ausfahren, da Höhe>500") falls versucht wird,
das Fahrwerk ein- oder auszufahren?
Anders gesagt:
Soll erst der neue Zustand des Fahrwerks gesetzt und dann ggf. eine Exception geworfen werden oder umgekehrt?
Es soll erst geprüft und dann gehandelt werden. (Angesichts der Tatsache, dass wir von einem Flugzeug reden, was bei falscher Fahrwerkposition schon mal abstürzen oder crashen kann, ist das wohl auch angebracht :))

Guido

Re: Übung 11 online!!!!

Verfasst: 23. Jan 2008 14:29
von Krümelmonster
Alles klar.

Re: Übung 11 online!!!!

Verfasst: 24. Jan 2008 18:08
von s!mon
Sehe ich das richtig, dass in Airplane quasi keine Exception geworfen wird (außer im Konstruktor) und das wir alle in AirborneComputer werfen sollen? Sollen die AirplaneExceptions immer in Airplane geworfen werden? Also ich beziehe mich jetzt vor allem auf gearDown() in der AirborneComputer-Klasse.

ps: 4083 Liter habe ich am Ende :p

pps: ich habe mich ständig verschrieben, weil die Methode die wir implementieren sollen changeHeigth heißt und nicht changeHeight.. sollte mal korrigiert werden. Trotzdem fande ich die Übung bisher am coolsten. Es war viel Code, der aber nicht allzu schwer war. Hat Spaß gemacht das zu programmieren. Lob ans Team :)

Re: Übung 11 online!!!!

Verfasst: 24. Jan 2008 20:28
von Jo(h)nny
muss man eigentlich eine exception werfen, wenn man beim ausgefahrenen fahrwerk die höhe auf über 500 ändert???

Re: Übung 11 online!!!!

Verfasst: 24. Jan 2008 21:47
von Krümelmonster
Da in der Aufgabenstellung keine Einschränkung gegeben ist, welche Methoden die Exception werfen sollen,
sind imho alle Methoden gemeint, bei denen die Bedingung, das Fahrwerk unter 300 Höheneinheiten
ausgefahren und über 500 Höheneinheiten eingefahren zu haben, verletzt werden kann.

Re: Übung 11 online!!!!

Verfasst: 24. Jan 2008 23:34
von s!mon
Hab mir auch schon überlegt, die AirplaneException von changeHeight nur in setHeight in der Airplane-Klasse zu werfen. Dann wird aber doch die Funktion gearIsDown() in AirborneComputer sinnlos, weil man sie gar nicht mehr benutzen muss.. seht seltsam alles :cry:

Re: Übung 11 online!!!!

Verfasst: 25. Jan 2008 01:48
von gismo
Es führen halt mehrere Lösungen zum Ziel, wenn man die Exception direkt in der Klasse Airplane werfen lässt, brauch man gearIsDown() zwar nicht mehr zum prüfen für die Exception, allerdings kann es ja sein, dass diese von externen Methoden benutzt wird.
Im realen Leben wäre gearIsDown() dann vermutlich ein Lämpchen, was dem Piloten anzeigt, dass das Fahrwerk ausgefahren ist.

Zu der vorherigen Frage, wo denn überall eine Exception geworfen werden muss, wenn die Höhe zu hoch oder zu niedrig für das Fahrwerk ist: Werft überall dort die Exception, wo eine Aktion entweder auf das Fahrwerk oder auf die Höhe ausgeübt wird.

Dann noch zwei Hinweise:
1. Prüft bitte, bevor ihr eure Lösung einreicht nochmal nach, ob ihr auch die Exceptions werft, die in der Aufgabenstellung gefordert werden und ihr nicht aus Versehen eine AirportException statt einer AirplaneException werft.

2. Erweitert am Besten eure Testfälle, die ihr mit den Templates bekommen habt und überprüft, ob ihr auch wirklich die Exceptions richtig auslöst. Dies wird in den vorgegebenen Tests nämlich nicht gemacht.

Re: Übung 11 online!!!!

Verfasst: 25. Jan 2008 14:55
von s!mon

Code: Alles auswählen

	private static void testdelete() throws AirportException,
			AirborneComputerException, AirplaneException {
		test.deleteAirport("Köln");
		try {
			test.flyTo("Köln");
		} catch (AirborneComputerException e) {
			System.out.println(e.getMessage());
		}
		System.out.println("-----Delete Test finished-----");
	}
Ich verstehe den Test nicht so ganz. Der Flughafen wird gelöscht und dann soll das Flugzeug dorthin fliegen. Das wird doch immer in einer Fehlermeldung enden?!

Re: Übung 11 online!!!!

Verfasst: 25. Jan 2008 15:13
von Stumpf.Alex
Ja genau das ist ja der Test, ob deine Exception funktioniert. :wink: