Java wo liegt der Fehler?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Leider zeigst du nur einen Teil deines Codes, was die Analyse nicht eben vereinfacht. Interessieren würde mich, welche Feldgrenzen du für die drei Felder festgelegt hast.

Höchst verdächtig finde ich aber in Zeile 123 diese Passage:

for (int i : num) {     .....    }

Wenn in num einer der Werte etas größer ist, könntest du da schnell eine Feldgrenzenüberschreitung erhalten.

Führe mal folgendes Programm aus, um zu verstehen, was diese Anweisung überhaupt tut:

int[] myNum = {10, 20, 30, 40};
for (i in myNum) {  System.out.println(i);  }
Woher ich das weiß:Berufserfahrung – Berufstätigkeit als Software-Entwickler

Beim Ausgeben machst du einen Fehler:

for(int i : num)

Das wird dir die Variable "i" auf den Wert setzen, der in "num" gespeichert ist, nicht auf den Index.
Demnach greifst du dann auf einen Index zu, der womöglich nicht existiert.

Da würdest du aber eine andere Exception bekommen.

Die Exception, die du erhälst, passt dazu, dass irgendwo ein Wert "null" ist, auf den aber zugegriffen wird.

Um diesen zu finden kannst du folgendes tun:

Entweder nutzt du einen Debugger, der dir dann direkt die Stelle liefert, an der der Fehler auftritt, sodass du prüfen kannst,w elcher Wert "null" ist.

Oder du suchst die entsprechende Stelle, beispielsweise indem du Ausgaben schreibst und schaust, ab welcher Stelle keine Ausgabe mehr kommt, sondern die Exception.
Evtl. kann dir die Exception hier auch irgendwie sagen, wo sie auftrat (ist die dort angegebene Stelle "Zeile 89" plausibel?).
Wenn du die Stelle gefunden hast, dann gibst du dir dort beteiligte Variablen aus und schaust, welche "null" sind. (wenn das tatsächlich die Zeile 89 ist, dann hast du den Array "num" nicht initialisiert (und die anderen Arrays evtl. auch nicht). Du möchtest and ieser Stelle evtl. auch lieber dynamische Datenstrukturen wie z.B. ArrayLists verwenden.)

Im Übrigen: Was du mit deinem programm anstellen möchtest ist etwas, was sich nicht derart einfach gestaltet, wie du es dir evtl. vorstellst, und wofür es spezielle Tools gibt, mit denen man soetwas handeln kann.
Sogenannte Parser-Generatoren erlauben es, Grammatiken zu definieren, beispielsweise solche wie für numerische Ausdrücke hier, und dann einen Parser zu generieren, der dir eine solche Eingabe wie hier in ihre Einzelteile aufteilt und diese z.B. in einen baum einordnet.
Dabei kann z.B. eine Operator-Präzedenz definiert werden, Assoziativität, und es kann sichergestellt werden, dass das Parsen des Ausdrucks auch tatsächlich funktioniert (was bei verschachtelten Ausdrücken je nach Parser durchaus problematisch sein kann).
Antlr und Yacc sind bekannte solche Tools. Xtext verwendet unter anderem Antlr und bietet weitere Features.