曾被要求为一个2D数组创建一个二进制搜索方法,该方法可以对字符串进行排序。我正在做一门具有很多细节的课程,我不能使用任何预先构建的搜索方法,但是我必须在没有任何学习内容的情况下创建它,我所提供的只是一种标准的二进制搜索方法一个包含整数的一维数组,所以帮助不大。
private void BtnSearch_Click(object sender, EventArgs e)
{
int startIndex = 0;
int finalIndex = gameArray.Length -1;
bool flag2 = false;
string searchTerm = txtSearch.Text;
int foundIndex = -1;
while (!flag2 && !((finalIndex - startIndex) <= 1))
{
int middle = (finalIndex + startIndex) / 2;
if (string.Compare(gameArray[middle, 0], searchTerm, true) == 0)
{
foundIndex = middle;
flag2 = true;
break;
}
else
{
if (string.Compare(gameArray[middle, 0], searchTerm, true) > 0)
finalIndex = middle;
else
startIndex = middle;
}
}
if (flag2)
lstGames.SelectedIndex = foundIndex;
else
MessageBox.Show("Not Found");
}
无论何时在程序中执行搜索,我都会不断收到此错误消息。
System.IndexOutOfRangeException:'索引超出了数组的边界。'
While循环执行时发生的情况
真的不太确定我现在在做什么错。
您应该在测试前检查“中间”是否等于或大于数组的长度。
避免在使用(finalIndex-startIndex> 1)时使用!((finalIndex-startIndex)<= 1)。非常干净。
!flag2在while子句中是不必要的,因为只有在flag2为true之后才会中断;