Code in Try-Catch Block wird nicht komplett ausgeführt

jens.ru

Mitglied
Guten Abend.

Ich habe in einer Methode einen try-catch Block. Dieser soll aus einem Array einen Eintrag "löschen". Dies mache ich, indem ich alle Einträge, die in diesem Array nach dem zu löschendem Objekt folgen einfach um eins versetze. Dies funktioniert auch. Allerdings habe ich auch einen Zähler, der die vorhandenen Einträge zählt. Bei jedem neuen Eintrag +1, bei jedem gelöschten Eintrag logischerweise -1.
Allerdings wird in dem Try-Block nach der Schleife nichts mehr weiter abgearbeitet.
Kann mir jemand sagen, warum dies so ist? Google hat mir leider nicht weitergeholfen. Wenn ich den Eintrag vor die Schleife mache, dann funktioniert das zählen, allerdings wird der Eintrag nicht gelöscht?

Java:
public static boolean removeById(int id) {
		try {
			counter--;
			for (int i = id; i < patients.length; i++) {
				patients[i] = patients[i + 1];
			}
			return true;
		}catch (Exception e) {
			return false;
		}	
	}
 
Zuletzt bearbeitet von einem Moderator:
Im try-Block erzwingst du eine ArrayIndexOutOfBoundException (und zwar immer im letzten Schleifendurchlauf)

Davon kriegst du nur nicht viel mit, da du die Exception direkt fängst und einfach False zurückgibst.
Was soll der try-catch-Block überhaupt für einen Sinn ergeben? Das sieht mir hier total fehl am Plazte aus...
 
Wenn ich einen Eintrag aus dem Array löschen möchte, den es aber gar nicht gibt? Eben die besagte Exception abfangen.
Wenn das löschen klappt, gebe ich true zurück, wenn es nicht klappt, dann false.

Und mithilfe deiner Antwort habe ich jetzt in der for-Schleife den letzten Schleifendurchlauf auf länge-1 gesetzt und schon funktioniert es.
Recht herzlichen Dank für deine Antwort! Auch wenn du den Sinn meines "Programmes" nicht verstehst ;-)
 
Zuletzt bearbeitet:
Verstehen tun wir's schon, aber du solltest statt eines try-catch-Blocks besser ein 'if' voranschalten, das z.B. prüft, ob ((id < 0) || (id>counter)) ist oder so ähnlich, und dann 'false' zurückgibt.

Das ist schönerer Stil, da es dem Leser sofort zeigt, was genau nicht erlaubt ist.
Außerdem ist es viel viel schneller, als try-catch (v.a. im catch-Fall).

Nach dem 'if' ist dann auch kein try-catch mehr nötig - dass die Bedingungen passen, ist dann ja sichergestellt...
 
Zuletzt bearbeitet:
Moin,

und wenn schon, dann wäre im catch-Teil ein "e.printStackTrace()" hilfreich, damit Du eine gefangene Exception wenigstens siehst!

Gruß
Klaus
 
Okay. Dann werde ich versuchen, das noch mal ein bisschen um zu schreiben und danke euch Allen erst einmal recht herzlich für eure Hilfe und eure Tipps!
 

Zurück
Oben