Индекс массива вне границ - Java Рекурсивный метод - PullRequest
0 голосов
/ 31 января 2020

Я пишу программу с 3 различными методами для практики рекурсии. Я успешно выполнил одно из трех, но сейчас я немного застрял на втором. Этот метод пытается подсчитать количество «улыбок» (:)) в массиве символов. Я думал, что написал правильно, но когда я тестирую это, я получаю исключение ArrayIndexOutOfBoundsException, но я не уверен почему. Мой метод следующий:

public static int countSmiles(char[] letters, int index) {

    int smileCounter = 0;

    //If the array is less than 2 in length it cannot include ":)".
    if(letters.length < 2) {
        return 0;
    }

    //If there is a smile increment the counter.
    else if(letters[index] == ':') {
        if(letters[index+1] == ')') {
            smileCounter++;
        }
    }

    //Increment the index
    index++;

    //Recursive assignment
    smileCounter = countSmiles(letters, index);

    //Return number of smiles
    return smileCounter;

}

И метод, который я тестирую, выглядит следующим образом:

public static void main(String[] args) {

    char[] JavaCharArray = {'r', 's', 't', 'u', ':', ')', 'v'};
    System.out.println(countSmiles(JavaCharArray, 0));
}

Из моего кода не похоже, что индекс, который я пытаюсь access (0) является отрицательным или больше, чем предоставленный массив. Я действительно просто не понимаю.

1 Ответ

1 голос
/ 31 января 2020

В рекурсивном методе вам нужно условие остановки. Попробуйте:

...
if(letters.length < 2) {
    return 0;
}

if (index + 2 > letters.length) {
    return 0;
}
...
...