我有一个Windows窗体应用程序,用于练习冒泡排序算法。基本上我有四个不同的单选按钮,每个按钮在单击时在列表框中显示一定数量的随机整数。我想要的是能够点击一个按钮"排序"然后对该列表框中的所有整数进行排序。由于每个单选按钮在列表框中显示不同的整数,我必须在radioButton1_CheckedChange方法下执行此操作,因此我可以轻松访问为列表框创建的随机数组。我目前正在努力获取我的代码,使button1_Clicked事件处理程序设置为" true"单击按钮时。以下是我的代码的摘录,向您展示我的意思。
bool buttonClick = false;
private void button1_Click(object sender, EventArgs e)//When button is clicked, button click is true
{
buttonClick = true;
}
private void radioButton1_CheckedChanged(object sender, EventArgs e)//Max 100 button
{
int smallMaxSize = 101;
int[] array = new int[smallMaxSize];
Random numGenerator = new Random();
numGenerator.Next(smallMaxSize);
for (int i=0; i<101; i++)//Generates 100 random numbers from 1-100
{
array[i] = numGenerator.Next(smallMaxSize);
Numbers.Items.Add(array[i]);
}
if (buttonClick == true)
{
Numbers.Items.Clear();
int Out;
int In;
for (Out = smallMaxSize - 1; Out > 1; Out--)
{
for (In = 0; In < Out; In++)
{
if (array[In] > array[In + 1])
{
int temp = array[In];
array[In] = array[In + 1];
array[In + 1] = temp;
}
}
}
}
正如您所看到的,我为按钮单击设置了一个私有bool,它始终设置为false。在button1_Click事件处理程序下,每当&#34;排序&#34;单击按钮。然后我有一个&#34; if&#34;单选按钮方法下的语句表示&#34;如果buttonClick == true,则运行此代码&#34;。当我运行代码并单击&#34;排序&#34;按钮,没有任何反应。任何人都有任何想法可以引导我朝着正确的方向前进吗?
答案 0 :(得分:0)
如果您选中其中一个复选框,则代码当前会运行排序算法。那是因为您的排序逻辑位于复选框检查事件(radioButton1_CheckedChanged
方法)的处理程序中。这意味着如果单击复选框,radioButton1_CheckedChanged
方法中的所有内容都将运行。但那不是你想要的。如果您希望在单击按钮时运行排序方法,则它必须位于button1_click
方法内。
你的bool变量或多或少没用。
试试这个:
private void button1_Click(object sender, EventArgs e)//When button is clicked, button click is true
{
int smallMaxSize = 101;
int[] array = new int[smallMaxSize];
Random numGenerator = new Random();
numGenerator.Next(smallMaxSize);
for (int i=0; i<101; i++)//Generates 100 random numbers from 1-100
{
array[i] = numGenerator.Next(smallMaxSize);
Numbers.Items.Add(array[i]);
}
if (buttonClick == true)
{
Numbers.Items.Clear();
int Out;
int In;
for (Out = smallMaxSize - 1; Out > 1; Out--)
{
for (In = 0; In < Out; In++)
{
if (array[In] > array[In + 1])
{
int temp = array[In];
array[In] = array[In + 1];
array[In + 1] = temp;
}
}
}
}
}
答案 1 :(得分:0)
Windows Forms是事件驱动编程意味着事情只发生在事件发生时,这通常是用户与表单的交互,但它可以是计时器,循环等。
您的问题是您在radioButton1_CheckedChanged
方法中使用冒号排序代码,该方法仅在radioButton1
已检查属性更改时触发。基本上发生的事情是,当您单击radiobutton时,您正在创建随机值,然后检查按钮是否被单击,这显然不是因为您仍然在radioButton1_CheckedChanged
。
您需要将冒泡排序代码移动到button1_Click
方法或者您可以先单击排序按钮,然后单击单选按钮。
int[] array;
int smallMaxSize = 101;
private void button1_Click(object sender, EventArgs e)//When button is clicked, button click is true
{
int Out;
int In;
for (Out = smallMaxSize - 1; Out > 1; Out--)
{
for (In = 0; In < Out; In++)
{
if (array[In] > array[In + 1])
{
int temp = array[In];
array[In] = array[In + 1];
array[In + 1] = temp;
}
}
}
}
private void radioButton1_CheckedChanged(object sender, EventArgs e)//Max 100 button
{
Numbers.Items.Clear();
array = new int[smallMaxSize];
Random numGenerator = new Random();
numGenerator.Next(smallMaxSize);
for (int i=0; i<101; i++)//Generates 100 random numbers from 1-100
{
array[i] = numGenerator.Next(smallMaxSize);
Numbers.Items.Add(array[i]);
}
}