我正在试验C#控制台应用程序中的列表,特别是随机化的int列表,其数字顺序是随机的。在这个实验中,当我按下Enter键并且显示它将停止的所有随机值时,我想要查看列表中的随机值。它按照我的意图运作:http://i.imgur.com/bNOYrZp.png[ ^]
Random r = new Random();
int tempValue;
List<int> number = new List<int>();
number.Add(1);
number.Add(2);
number.Add(3);
number.Add(4);
number.Add(5);
number.Add(6);
number.Add(7);
number.Add(8);
number.Add(9);
number.Add(10);
for (int i = 0; i < 10; i++)
{
tempValue = r.Next(0, number.Count);
Console.WriteLine(number[tempValue]);
number.RemoveAt(tempValue);
Console.ReadLine();
}
现在我如何在C#的Windows窗体应用程序中执行类似的操作?我没有按回车来查看列表,而是按下按钮浏览列表,每次按此按钮时,值的顺序都会显示在标签上。
我使用了类似的代码,但它没有按预期工作。它不是经过随机值,而是每次点击按钮时都会保持新的值顺序。我想要它做的是通过随机值,并在它显示所有10个随机值后,没有重复,它停止。
private void button1_Click(object sender, EventArgs e)
{
List<int> number = new List<int>();
Random r = new Random();
int tempValue;
number.Add(1);
number.Add(2);
number.Add(3);
number.Add(4);
number.Add(5);
number.Add(6);
number.Add(7);
number.Add(8);
number.Add(9);
number.Add(10);
for (int i = 0; i < 10; i++)
{
tempValue = r.Next(0, number.Count);
label1.Text = number[tempValue].ToString();
number.Remove(number[tempValue]);
}
}
答案 0 :(得分:0)
由于你在click事件中创建了列表创建和 for循环,因此它的工作是“as-coded”(显然不是你想要的)。
请记住,每次按下按钮都会运行整个点击处理程序。因此,您需要在其他位置初始化列表,然后在单击时迭代它。类似的东西:
private Random rng = new Random();
private List<int> numbers = new List<int>();
private void Form_Loaded(...) //Set to Form's Loaded event
{
number.Add(1);
number.Add(2);
number.Add(3);
number.Add(4);
number.Add(5);
number.Add(6);
number.Add(7);
number.Add(8);
number.Add(9);
number.Add(10);
}
private void button1_click(...)
{
tempValue = rng.Next(0, number.Count);
label1.Text = number[tempValue].ToString();
number.Remove(number[tempValue]);
}
请注意,一旦列表用完,此代码将出现一些问题,无法重新初始化列表等。我将这些作为练习留给您。
另请注意,我创建了{em>一个 Random
的实例并将其存储在类级别。通常,您希望每个类使用一个实例以避免播种问题(尽管在按钮单击中重新创建它会在技术上有效,因为您可能无法足够快地单击按钮)。