2D ArrayList Binary Search c#

问题描述 投票:0回答:1

曾被要求为一个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循环执行时发生的情况

真的不太确定我现在在做什么错。

c# windows-forms-designer
1个回答
0
投票

您应该在测试前检查“中间”是否等于或大于数组的长度。

避免在使用(finalIndex-startIndex> 1)时使用!((finalIndex-startIndex)<= 1)。非常干净。

!flag2在while子句中是不必要的,因为只有在flag2为true之后才会中断;

© www.soinside.com 2019 - 2024. All rights reserved.