Determinante einer Matrix

Hallo,

ich soll ein Java Programm schreiben, welches die Determinante einer nxn Matrix rekursiv berechnet.
Dazu habe ich ein Programm geschrieben, allerdings funktioniert dieses nicht wie ich es geplant habe, wenn ich eine beliebige 2x2 Matrix eingebe, bricht das Programm mit folgender Fehlermeldung ab:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at Determinante1.det(Determinante1.java:40)
at Determinante1.main(Determinante1.java:78)

Ich vermute, dass es irgendwo noch einen kleinen Bug gibt, den ich aber auch nach langer Suche nicht gefunden habe. Das Programm soll bei jedem rekursivem Aufruf der Methode beim erreichen der for Schleife in Zeile 27 die Matrix m2 um eins verkleinern und ich glaube, dass mein Programm dieses aus einem mir unbekannten Grund einmal zu viel macht (nachdem i beim 2. Durchlauf auf 1 gesetzt wurde), weswegen später versucht wird auf eine 0x0 Matrix zuzugreifen, was zu dem Fehler von oben führt.
Alternativ kann es auch ein Problem beim Übergeben der Matrizen in 78 und 49 geben, vielleicht funktioniert das mit der Übergabe nicht so, wie ich vermute.

Vielleicht findet jemand den Fehler, vielen Dank!
 

Anhänge

  • Code.txt
    1,3 KB · Aufrufe: 7

JCODA

Top Contributor
Scheint, als wäre m2.length-1 durch die rekursiven aufrufe mal 0. Dann beinhaltet dein Array keine Einträge. Dann greifst du mit Index 0 darauf zu und erhälst eine OutOfBoundsException.
 
das ist vermutlich das problem, er soll bis dahin aber nur kommen, wenn m2.length noch 2 oder größer ist, dann kann er es auf 1 oder einen kleineren wert setzen, wenn m2.length schon 1 ist, ist die determinante der eintrag [0] [0] und er soll in zeile 20 mit der if bedingung abgefangen werden und direkt x returnen und gar nicht bis nach da unten kommen.
wenn man in einer methode etwas returned, wir der rest der methode nicht mehr weiter ausgeführt, oder?
 

JCODA

Top Contributor
Oh, tatsächlich, du prüfst den Fall schon ab.
Der Fehler liegt an der Zeile 27.
Dort steht: i = i++
es sollte aber heißen: i++
i++ erhöht den wert bereits um 1.
 
das sieht gut aus, ich danke dir, ich test mal
für 2x2 scheint es nun zu funktionieren, aber für 3x3 und größere noch nicht, aber warum, durch den rekursiven aufruf müsste es doch, wenn es für 2x2 funktioniert auch für beliebige n funktionieren
 

Neue Themen


Oben