Бинарный поиск имеет индекс вне диапазона исключений, но работал раньше - PullRequest
0 голосов
/ 22 ноября 2018

У меня возникла эта проблема, я получил исключение индекса для этого кода по неизвестной причине.У меня есть список студентов, которые преобразуются в массив, а затем я возвращаю информацию для студентов в виде типа String.getFN возвращает номер факультета (int).Список работает нормально, может быть потому, что в нем слишком мало элементов?исключение в этой строке:

error --> if (item > data[mid].getFN())

public string BinarySearch(int item)
    {

        int min = 0;
        int N = myList.ToArray().Length;
        int max = N - 1;
        Student[] data = myList.ToArray();
        do
        {
            int mid = (min + max) / 2;
            if (item > data[mid].getFN())
                min = mid + 1;
            else
                max = mid - 1;
            if (data[mid].getFN() == item)
                return data[mid].toString();
        } while (min <= max);
        return "Not found. ";
    }

1 Ответ

0 голосов
/ 22 ноября 2018

Вы пытаетесь получить доступ к массиву data по определенному индексу;«0» для получения первого элемента, «1» для следующего и т. Д.

В той строке, где вы видите ошибку, вы пытаетесь получить доступ к массиву с индексом mid, независимо от его значенияв это время.Ошибка говорит вам, что в этом индексе нет значения.

Возможно, массив пуст, возможно, ваша математика заставляет вас прочитать индекс выше, чем последняя запись в массиве.

Установите точку останова в этой строке, а затем наведите курсор мыши на mid, чтобы увидеть, какой индекс вы пытаетесь прочитать, и на data, чтобы увидеть, что находится в массиве.Вы должны увидеть, что происходит.

...