作为编码执行者,我正在研究不同排序算法的可视化。我有一个按钮,暂停算法并将数组的每个项目显示为条形图。为了实现这个目的,我在两个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() - 调用的问题,但我需要这样,所以我可以按下按钮。
另外,如果您在我的代码中发现其他任何我可以做得更好的事情,请告诉我,我在编码方面不是很有经验,所以欢迎任何帮助和建设性的批评。 : - )
谢谢!
本杰明
答案 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