二进制搜索的索引超出范围异常,但之前可以工作

时间:2018-11-21 22:11:26

标签: c# exception console-application

我遇到了这个问题,由于未知原因,我在此代码上获得了索引超出范围的异常。我有转换为数组的学生列表,然后以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 :(得分:0)

您正尝试在特定索引处访问数组data; “ 0”表示第一个项目,“ 1”表示下一个项目,等等。

在看到错误的那一行上,您尝试访问位于mid的索引处的数组,无论当时的值是多少。错误告诉您该索引没有值。

也许数组为空,也许是由于数学运算导致您读取的索引高于数组的最后一个条目。

在该行上放置一个断点,然后将鼠标悬停在mid上以查看您要读取的索引,然后将鼠标悬停在data上以查看数组中的内容。您应该看到发生了什么事。