在嵌套的While-Loop之后,For-Loop索引重置为0

时间:2016-12-22 14:54:08

标签: c# loops for-loop while-loop

作为编码执行者,我正在研究不同排序算法的可视化。我有一个按钮,暂停算法并将数组的每个项目显示为条形图。为了实现这个目的,我在两个for循环中有一个嵌套的while循环用于排序。它循环通过,直到我再次按下按钮,布尔变量设置为true并继续排序。

然而,在程序退出while循环后,for循环(i和j)的两个indence重置为0并且排序从头开始。

swap()和draw()是自定义函数,其功能与名称的完全相同。

这是我的排序代码:

for (i = 0; i < items.Count(); i++)
    {
        for (j = 0; j < items.Count() - 1 - i; j++)
        {
            //lbl_i.Text = Convert.ToString(i);
            //lbl_j.Text = Convert.ToString(j);

            if (items[j] > items[j + 1])
            {
                swap(j, j + 1); //swaps the items at two given indecies
                draw(); // draws the array to the picturebox
            }

            while (sorting == false) //the sorting is paused
            {
                Application.DoEvents();
            }
        }
    }

知道为什么会这样吗?

我怀疑它可能是Application.DoEvents() - 调用的问题,但我需要这样,所以我可以按下按钮。

另外,如果您在我的代码中发现其他任何我可以做得更好的事情,请告诉我,我在编码方面不是很有经验,所以欢迎任何帮助和建设性的批评。 : - )

谢谢!

本杰明

2 个答案:

答案 0 :(得分:2)

你不能在for循环中创建i和j,我和j可能会在你的应用中的其他地方被更改。试试这个:

for (int i = 0; i < items.Count(); i++)
{
    for (int j = 0; j < items.Count() - 1 - i; j++)
    {
        //lbl_i.Text = Convert.ToString(i);
        //lbl_j.Text = Convert.ToString(j);

        if (items[j] > items[j + 1])
        {
            swap(j, j + 1); //swaps the items at two given indecies
            draw(); // draws the array to the picturebox
        }

        while (sorting == false) //the sorting is paused
        {
            Application.DoEvents();
        }
    }
}

更改位于:int i,int j

答案 1 :(得分:0)

找到答案:问题是,我首先从同一个按钮调用此函数。在其click事件中,我有一个if语句来检查按钮是否显示“Pause”或“Start”,但是当我暂停程序时,它再次显示“Start”。因此,当我单击它时,将再次调用该函数,并将int i和int j重新初始化为0。

点击事件中的代码:

-R