【问题标题】:Binary search has index out of range exception but worked before二进制搜索的索引超出范围异常但之前有效
【发布时间】:2018-11-21 22:11:26
【问题描述】:

我遇到了这个问题,由于未知原因,我在此代码上得到索引超出范围异常。我有转换为数组的学生列表,然后我以字符串类型返回学生的信息。 getFN 正在返回 Faculty Number (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. ";
    }

【问题讨论】:

  • 如果列表为空,那么在尝试检索项目时总是会出错。

标签: c# exception console-application


【解决方案1】:

您正试图在特定索引处访问数组data; '0' 获取第一项,'1' 获取下一项等。

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

也许数组是空的,也许你的数学计算导致你读取的索引比数组中最后一个条目高。

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

【讨论】:

    猜你喜欢
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-25
    相关资源
    最近更新 更多