Index 6 out of bounds for length 6

Суть в том, чтобы сделать программу которая считает единицы в числе. А когда видит 2 нуля, то заканчивает свою работу. Обязательные условия. Сделать с помощью рекурсии, без глобальных переменных. Вроде как сделал, но выдает ошибку

Index 6 out of bounds for length 6

Как бороться, не знаю...

import java.lang.*;

public class solution {


    public static void main(String[] args){
        recursion(111001);
    }

    public static int recursion(int numbers){
        String temp = Integer.toString(numbers);
        int[] newGuess = new int[temp.length()];
        int counter = 0;
        int i = 0;
        for (; i < temp.length(); i++)
        {
            newGuess[i] = temp.charAt(i) - '0';
        }
        if(newGuess[i] + newGuess[i+1] == 0){
            return 0;
        }
        if(newGuess[i] + 0 == 1){
            counter += 1;
        }
        System.out.println(counter);
        return recursion(numbers);
    }

}


Ответы (3 шт):

Автор решения: Igor

Что вернет newGuess[i+1], когда i равен temp.length() - 1?

Что вернет newGuess[i], когда i равен temp.length()?

Зачем тут рекурсия, и когда она остановится, если в числе нет двух нулей подряд?

→ Ссылка
Автор решения: Kir

вы не совсем понимаете как должна работать рекурсия.

  1. Вы решаете задачу не совсем верно. В вашей функции, вы проверяете только первые две цифры, ваш параметр i при заходе в функцию всегда равен 0, вы нигде его не изменяете. То же самое с counter.

  2. Вам стоит ввести параметр количества цифр оставшегося числа и запускать рекурсию от него.

  3. У вас нет выхода из рекурсии, если в числе нет двух нулей подряд.

  4. newGuess[i] + 0 == 1 - просто странно прибавлять ноль

  5. Длину строки/саму строку вы также не меняете.

→ Ссылка
Автор решения: Sergei Buvaka

Ваша проблема в том, что у вас есть в цикле такая вот запись:

newGuess[i+1]

Когда вы приходите на последнюю итерацию цикла то вы обращаетесь к несуществующему элементу. К примеру если в цикле 3 элемента, то будет 3 итерации и на 3ей ваш i+1 будет равен индексу 3, которого не существует.

Решить это можно двумя способами (тут надо по задаче смотреть). Либо просто не доходить до последнего элемента

for (; i < temp.length() - 1; i++) {}

Или, если вам нужен этот последний элемент, то проверять, что если элемент последний то выполнять какое-то другое действие

for (; i < temp.length() - 1; i++) {
    // some code
    if (i == temp.length() - 1) {
        // обработать последний элемент
    }
}
→ Ссылка