我遇到了这个问题,由于未知原因,我在此代码上获得了索引超出范围的异常。我有转换为数组的学生列表,然后以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. ";
}
答案 0 :(得分:0)
您正尝试在特定索引处访问数组data
; “ 0”表示第一个项目,“ 1”表示下一个项目,等等。
在看到错误的那一行上,您尝试访问位于mid
的索引处的数组,无论当时的值是多少。错误告诉您该索引没有值。
也许数组为空,也许是由于数学运算导致您读取的索引高于数组的最后一个条目。
在该行上放置一个断点,然后将鼠标悬停在mid
上以查看您要读取的索引,然后将鼠标悬停在data
上以查看数组中的内容。您应该看到发生了什么事。