Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.09.2021, 13:08   #1
Askul
Новичок
Джуниор
 
Регистрация: 14.09.2021
Сообщений: 3
Восклицание Ошибка во время рекурсии метода

Есть метод ему передают
array
a l
m a

word
lama

i=0
j=1
m=1

По идее данный метод должен вывести
[0,0][1,0][1,1]
и вернуть true

Но метод выводит
[0,0], а после останавливается из-за ошибки
"Index was out of range. Must be non-negative and less than the size of the collection. Arg_ParamName_Name
на месте входа в рекурсию этой функции
Прошу подскажите, почему происходит эта ошибка. Что не так с этой строкой SearchWord2(i, j, ++m, Matrix, Word);

Код:
static bool SearchWord2(int i, int j, int m, char[,] Matrix, string Word)
        {
            if (m  < Word.Length)
            {
                

                if ((j != 0) && (Assay[m - 1] > 2) && ((Way.Count == 1) || (Way[m - 1] != 3)))
                    if (Matrix[i, j - 1] == Word[m])
                    {
                        
                        WayAssay(1, 3, m - 1, i, --j);
                        
                        SearchWord2(i, j, ++m, Matrix, Word);//  Index was out of range...                    }
                if ((i != 0) && (Assay[m - 1] > 1) && ((Way.Count == 1) || (Way[m - 1] != 4)))
                    if (Matrix[i - 1, j] == Word[m])
                    {
                        WayAssay(2, 2, m - 1, --i, j);
                        SearchWord2(i, j, ++m, Matrix, Word);
                    }
                if ((j + 1 < Matrix.GetLength(1)) && (Assay[m - 1] > 0) && ((Way.Count == 1) || (Way[m - 1] != 1)))

                    if (Matrix[i, j + 1] == Word[m])
                    {
                        WayAssay(3, 1, m - 1, i, ++j);
                        SearchWord2(i, j, ++m, Matrix, Word);
                    }

                if ((i + 1 < Matrix.GetLength(0)) && ((Way.Count == 1) || (Way[m - 1] != 2)))
                    if (Matrix[i + 1, j] == Word[m])
                    {
                        WayAssay(4, 0, m - 1, ++i, j);
                        SearchWord2(i, j, ++m, Matrix, Word);
                    }
                    else
                    {
                       ...
                        
                    }
                return false;
            }
           else return true;
        }

Последний раз редактировалось Askul; 14.09.2021 в 13:51.
Askul вне форума Ответить с цитированием
Старый 14.09.2021, 14:31   #2
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Вылезли за пределы массива. Идите в отладчике по шагам и проверяйте работоспособность.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 14.09.2021, 21:22   #3
Askul
Новичок
Джуниор
 
Регистрация: 14.09.2021
Сообщений: 3
По умолчанию

Цитата:
Сообщение от WorldMaster Посмотреть сообщение
Вылезли за пределы массива. Идите в отладчике по шагам и проверяйте работоспособность.
В том и проблема, что там ниоткуда вылазить. Ошибку выдает при передаче данных в рекурсию функции. Присвоение значений уже сделано. Вот тут все рабочее WayAssay(1, 3, m - 1, i, --j); после можно вывести любое сообщение
Функция останавливается именно в строке рекурсии. SearchWord2(i, j, ++m, Matrix, Word)
Askul вне форума Ответить с цитированием
Старый 14.09.2021, 21:42   #4
Askul
Новичок
Джуниор
 
Регистрация: 14.09.2021
Сообщений: 3
По умолчанию

Как можно вылезти за предел параметров в рекурсию?
Askul вне форума Ответить с цитированием
Старый 15.09.2021, 08:10   #5
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Цитата:
Сообщение от Askul Посмотреть сообщение
Функция останавливается именно в строке рекурсии. SearchWord2(i, j, ++m, Matrix, Word)
Какой это уровень рекурсии?? Каковы значения i, j, m в момент ошибки??


Цитата:
Сообщение от Askul Посмотреть сообщение
Как можно вылезти за предел параметров в рекурсию?
Вы думаете что система вас обманывает чтоли??
Вам же в ошибке предельно ясно написано:
Index was out of range. Must be non-negative and less than the size of the collection.

Индекс вне диапазона. Если у вас в массиве 10 значений, а вы обращаетесь к 11 элементу с индексом 10 то в таком случае и получите ошибку.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц