我制作了一个简单的WindowsFormsApplication,但我遇到了一些困难。在表单中我有10个TextBoxes和一个按钮。该程序的目的是在单击按钮时在每个框中生成不同的数字。以下是代码中的一部分:
private void button1_Click(object sender, EventArgs e)
{
int p = 0;
int[] array = GeneratingArray();
foreach (Control c in tableLayoutPanel1.Controls)
{
if (c.GetType().ToString() == "System.Windows.Forms.TextBox")
{
c.Text = array[p].ToString();
p++;
}
}
}
public int GeneratingInt()
{
int random;
Contract.Ensures(Contract.Result<int>() > -11, "Array out of Bounds(-10 ; 10)");
Contract.Ensures(Contract.Result<int>() < 11, "Array out of Bounds(-10 ; 10)");
Random gnr = new Random();
random = gnr.Next(20);
return random;
}
public int[] GeneratingArray()
{
int[] array = new int[10];
int random;
for (int i = 0; i < 10; i++)
{
random = GeneratingInt();
array[i] = random;
}
return array;
}
问题是当我使用调试器时一切正常但是当我在所有框中启动应用程序时生成相同的数字。我无法找到导致此类问题的原因,所以我一直在问你。感谢。
答案 0 :(得分:6)
问题是您的应用程序正在快速运行。
通过每次调用Random
创建GeneratingInt
的新实例,您将使用当前时间播种随机数。当在紧密循环中运行时,这会使随机生成器每次都提供相同的数字。
将Random
移动到类级变量,构造一次,然后重用相同的实例。这将使它按照您希望的方式运行。