0

Не могу справиться с проблемой При вводе любых данных получаю ошибку Индекс находился вне границ массива в строке.

B[1] = St[maxi][(St[maxi].Length)];

Весь код

private void Make_Click(object sender, EventArgs e)
        {
            int Nk, i, j, N, K, Len, P, max, maxi, L, T;
            String Lozung;
            long[] A;
            char[] B;
            A = new long[1000];
            B = new char[1000];
            Nk = 0;
            Lozung = "solve";
            string[] St;
            St = new string[10];
            N = 4;
        St[0] = "set";
        St[1] = "owe";
        St[2] = "evil";
        St[3] = "too";

        K = 0;
        Len = Lozung.Length;
        do
        {
            T = K;
            if (K == 0)
            {
                max = 0;
                maxi = 1;
                for (i = 1; i < N; i++)
                {
                    L = St[i].Length;
                    P = 0;
                    for (j = 1; j < L; j++)
                    {
                        if (St[i][j] == Lozung[P + 1])
                        {
                            P++;
                        }
                        if ((P > max) || ((P == max) && ((St[maxi].Length) > L)))
                        {
                            max = P;
                            maxi = i;
                        }
                    }
                    Nk = 1;
                    A[1] = maxi;
                    B[1] = St[maxi][(St[maxi].Length)];
                    K = max;
                }

                max = 0;
                maxi = 1;
                for (i = 1; i < N; i++)
                {
                    if (St[i][1] == B[Nk])
                    {
                        L = St[i].Length;
                        P = K;
                        for (j = 2; j < L; j++)
                        {
                            if (St[i][j] == Lozung[P + 1])
                            {
                                P++;
                            }
                            if ((P > max) || ((P == max) && (St[maxi].Length > L)))
                            {
                                max = P;
                                maxi = i;
                            }
                        }
                        Nk++;
                        A[Nk] = maxi;
                        B[Nk] = St[maxi][(St[maxi].Length)];
                        K = max;
                    }
                }
            }

        }
        while ((T == K) || (K >= Len));
        {
            if (T == K)
            {
                outTextBox.Text = ("?");
            }
            for (i = 1; i < Nk; i++)
            {
                outTextBox.Text = St[A[i]].ToString();
            }
        }
    }

Правильный ответ программы должен быть - "?". Заранее спасибо за помощь!

  • вне границ массива, значит где-то ты её превышаешь. Где именно - воспользуйся отладкой, посмотри, что где у тебя в коде происходит на каждой строчке, а точнее на той строке, на которой и выскакивает исключение – Алексей Шиманский Sep 06 '22 at 06:35
  • А что этот код вообще делает? У меня впечатление, что этот код сильно переусложнён и запутан, всё это наверняка можно гораздо проще, короче, и главное понятнее сделать. А у вас тут нужно думать, что такое L, K, T, P и прочее. – CrazyElf Sep 06 '22 at 06:35

1 Answers1

0
B[1] = St[maxi][(St[maxi].Length-1)];

Length возвращает количество символов, проще говоря например ваша строка хранит "Hello" длина будет 5, но подсчет индексов начинается с 0, следовательно максимальный индекс в строке это 4

Поэтому вам надо ставить

Length-1
ACTPOHOM
  • 61
  • 3