Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 05.03.2021
Сообщений: 2
1

Ошибка в коде "System.IndexOutOfRangeException: "Index was outside the bounds of the array"

05.03.2021, 20:50. Показов 2228. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
За пример был взять код С++ алгоритма поиска подстроки Кнута-Морриса-Прата.
На плюсах все работает, но на # вылезает ошибка "System.IndexOutOfRangeException: "Index was outside the bounds of the array." в этом месте "while (match >= 0 && S[i] != T[match]) match = F[match];"

Помогите пожалуйста решить проблему, огромное спасибо если напишите уже готовое решение.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
using System;
 
namespace C_sharp
{
    
    class Program
    {
     
        static void Main(string[] args)
        {
 
            int N = Convert.ToInt32(Console.ReadLine());
            string S = Console.ReadLine();
            string T = Console.ReadLine();
            int[] F = new int[250005];
            S += S;
            F[0] = -1; F[1] = 0;
          
            for(int i = 2; i <= N; i++)
            {
                int Match = F[i - 1];
                while (Match >= 0 && T[Match] != T[i - 1]) Match = F[Match];
                F[i] = Match + 1;
            }
            int match = 0;
            for(int i = 0; i <= (2 * N - 1); i++) 
            {
                while (match >= 0 && S[i] != T[match]) match = F[match]; // Ошибка здесь!
 
                match++;
                if (match == N)
                {
                    if (i == (N - 1))
                        Console.WriteLine(0);
                    else
                        Console.WriteLine(2 * N - i - 1);
                }
            }
            Console.WriteLine(-1);
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.03.2021, 20:50
Ответы с готовыми решениями:

Ошибка System.IndexOutOfRangeException: "Index was outside the bounds of the array."
// Ошибка здесь(не пойму что не так) System.IndexOutOfRangeException: &quot;Index was outside the bounds...

Ошибка System.IndexOutOfRangeException: "Index was outside the bounds of the array"
Юнити. Есть трёхмерный массив, есть цикл. Но я не понимаю, почему на 34 строке появляется...

Ошибка System.IndexOutOfRangeException: "Index was outside the bounds of the array"
В двумерном массиве A=(a1, а2, ..., аn) отрицательные элементы, имеющие четный порядковый номер,...

Ошибка System.IndexOutOfRangeException: "Index was outside the bounds of the array."
В 18 строке выдает ошибку System.IndexOutOfRangeException: &quot;Index was outside the bounds of the...

IndexOutOfRangeException: Index was outside the bounds of the array. (ошибка в коде)
Всем привет, возникает вот такая ошибка в коде: &quot;IndexOutOfRangeException: Index was outside the...

2
1123 / 655 / 393
Регистрация: 28.01.2021
Сообщений: 1,336
08.03.2021, 11:23 2
В вашем случае, можете сделать проверку, что бы не выходить за границы:

C#
1
if (i == match) return;

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 static int[] GetPrefix(string s)
        {
            int[] result = new int[s.Length];
            result[0] = 0;
            int index = 0;
 
            for (int i = 1; i < s.Length; i++)
            {
                while (index >= 0 && s[index] != s[i]) { index--; }
                index++;
                result[i] = index;
            }
 
            return result;
        }
 
        static int FindSubstring(string pattern, string text)
        {
            int[] pf = GetPrefix(pattern);
            int index = 0;
 
            for (int i = 0; i < text.Length; i++)
            {
                while (index > 0 && pattern[index] != text[i]) { index = pf[index - 1]; }
                if (pattern[index] == text[i]) index++;
                if (index == pattern.Length)
                {
                    return i - index + 1;
                }
            }
 
            return -1;
        }
    }
1
0 / 0 / 0
Регистрация: 05.03.2021
Сообщений: 2
14.03.2021, 19:36  [ТС] 3
Здравствуйте! Спасибо что ответили, но я никак не пойму как связать обе части кода чтобы программа запускалась и работала без ошибки. Можете конкретнее объяснить куда я должен вставить проверку?

Добавлено через 33 минуты
Я решил проблему нахождения индекса за пределами массива. Нужно было использовать return; По невнимательности пропустил) Ребят проверяйте тщательнее код и будет вам счастье. Ошибка была в этом месте:
C#
1
2
3
4
5
6
7
8
if(match == N)
{
    if(i == N - 1)
        Console.WriteLine(0);
    else
        Console.WriteLine(2*N-i-1);
    return; //здесь
}
0
14.03.2021, 19:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.03.2021, 19:36
Помогаю со студенческими работами здесь

System.IndexOutOfRangeException: Index was outside the bounds of the array
System.IndexOutOfRangeException: Index was outside the bounds of the array. at...

System.IndexOutOfRangeException Index was outside the bounds of the array
Приветствую всех. Столкнулся с проблемой System.IndexOutOfRangeException Index was outside the...

Ошибка - Runtime exception: System.IndexOutOfRangeException: Index out of the bounds of the array
Всем привет, помогите пожалуйста решить ошибку - Runtime exception:...

Морской бой. Ошибка System.IndexOutOfRangeException: "Index was outside the bounds of the array."
Добрый день коллеги. Возникает ошибка System.IndexOutOfRangeException: &quot;Index was outside the...

Ошибка IndexOutOfRangeException: Index was outside the bounds of the array
Ошибка в Unity, игра 2D : IndexOutOfRangeException: Index was outside the bounds of the array. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru