# Undeutiger Fehler im Programm



## David2456 (15. Dez 2015)

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?


```
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


----------



## VfL_Freak (15. Dez 2015)

Moin,



David2456 hat gesagt.:


> im folgendem Code ist scheinbar irgendwo ein Fehler


Scheinbar ??? 
Ist da nun ein Fehler oder nicht ?? 



David2456 hat gesagt.:


> Ich kann nicht genau sagen wo und wodurch er auftritt. Könnte mir einer Verraten in welcher Zeile ich suchen muss oder ähnliches?


Könntest *DU* denn wenigstens verraten, was für einen Fehler du meinst ??? 

Gruß Klaus


----------



## David2456 (15. Dez 2015)

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


----------



## VfL_Freak (15. Dez 2015)

_*WELCHE*_ Exception denn ???
Isses denn so schwer ???

http://www.java-forum.org/forum-faq-beitraege/7407-man-fragen-richtig-stellt.html

Gruß Klaus


----------



## David2456 (15. Dez 2015)

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 (15. Dez 2015)

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 (15. Dez 2015)

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


----------



## Joose (15. Dez 2015)

Die Prüfung in function1 passt schon so wie sie ist.
Nur in function2 muss man ebenfalls eine Prüfung einbauen.


----------



## David2456 (15. Dez 2015)

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 (15. Dez 2015)

@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!


----------



## David2456 (16. Dez 2015)

Danke Joose hat funktioniert.


----------

