Undeutiger Fehler im Programm

David2456

Aktives Mitglied
Hallo,
im folgendem Code ist scheinbar irgendwo ein Fehler. Ich kann nicht genau sagen wo und wodurch er auftritt. Könnte mir einer Verraten in welcher Zeile ich suchen muss oder ähnliches?

Java:
public class RecursiveMystery {
        public static void main(String[] args) {
         
            int[] values = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
            Out.println(function1(values, 0));
           
            int[] values2 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
            Out.println(function1(values2, 0));
        }
           
        public static int function1(int[] values, int i) {
            if (i == values.length) {
                return 0;
            }
                return values[i] + function2(values, i + 1);
        }
       
        public static int function2(int[] values, int i) {
           
            return -values[i] + function1(values, i + 1);
        }
    }

Danke schonmal
 

David2456

Aktives Mitglied
Also erstmal. Ja da ist ein Fehler drin :D
Und zweitens Zitat "Es endet mit einer Exception bei der rekursiven Berechnung mit dem Array values2"
 

David2456

Aktives Mitglied
Hier nochmal genau

Exception in thread "main" java.langArrayIndexOutOfBoundsException: 11
at RecursiveMystery.function2(RecursiveMystery.java:20)
at RecursiveMystery.function1(RecursiveMystery.java:15)
at RecursiveMystery.function2(RecursiveMystery.java:20)
at RecursiveMystery.function1(RecursiveMystery.java:15)
at RecursiveMystery.function2(RecursiveMystery.java:20)
at RecursiveMystery.function1(RecursiveMystery.java:15)
at RecursiveMystery.function2(RecursiveMystery.java:20)
at RecursiveMystery.function1(RecursiveMystery.java:15)
at RecursiveMystery.function2(RecursiveMystery.java:20)
at RecursiveMystery.function1(RecursiveMystery.java:15)
at RecursiveMystery.function2(RecursiveMystery.java:20)
at RecursiveMystery.function1(RecursiveMystery.java:15)
at RecursiveMystery.main(RecursiveMystery.java:8)
 

Joose

Top Contributor
Wenn eine Exception fliegt oder der Compiler einen Fehler anzeigt, diesen Fehler bitte immer dazu posten!

Deine Exception sagt doch schon genau aus wo das Problem liegt:
In Zeile 20 der Klasse "RecursiveMystery". Dort willst du auf den Index 11 eines Arrays zugreifen, da das Array aber anscheinend nicht so groß ist fliegt eben diese Exception.
 

JStein52

Top Contributor
Ich würde es mal so probieren:

if (i == values.length-1)

ich weiss zwar nicht ob das noch das tut was du möchtest aber so wie es ist ist es eindeutig falsch
 

David2456

Aktives Mitglied
Danke erstmal für die vielen Antworten. Zu JStein52
wenn ich die Prüfung

if (i == values.length-1){
return 0;
}

in function2 einbaue, kriege ich immernoch den selben Fehler. Irgendeine Idee?
 

Joose

Top Contributor
@David2456
Siehe meinen Post: Die Prüfung in function1 hat schon gepasst. Mit dem Array "values1" trifft dann genau diese Bedingung (wie im Anfangspost) zu. Da das Array "values2" um ein Element länger ist wird nach "function1" nochmal "function2" aufgerufen, dort fehlt aber eine Prüfung ob der Index == Arraylänge entspricht.

Tipp: Verkürze deine beiden Arrays doch mal auf 2 Elemente (values1) bzw. 3 Element (values2) und debugge dein Programm. Wenn du nicht genau weißt wie man den Debugger verwendet mach einen Schreibtischtest (mit den kurzen Arrays) dann solltest dir klar werden was da genau passiert!
 

Neue Themen


Oben