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 шт):
Что вернет newGuess[i+1], когда i равен temp.length() - 1?
Что вернет newGuess[i], когда i равен temp.length()?
Зачем тут рекурсия, и когда она остановится, если в числе нет двух нулей подряд?
вы не совсем понимаете как должна работать рекурсия.
Вы решаете задачу не совсем верно. В вашей функции, вы проверяете только первые две цифры, ваш параметр i при заходе в функцию всегда равен 0, вы нигде его не изменяете. То же самое с counter.
Вам стоит ввести параметр количества цифр оставшегося числа и запускать рекурсию от него.
У вас нет выхода из рекурсии, если в числе нет двух нулей подряд.
newGuess[i] + 0 == 1 - просто странно прибавлять ноль
Длину строки/саму строку вы также не меняете.
Ваша проблема в том, что у вас есть в цикле такая вот запись:
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) {
// обработать последний элемент
}
}