我想检查数组中是否有相同的值,如我在标题中提到的那样。如果有,我想传递该值并检查另一个随机值以添加到列表框。
在我的表单中,有2个textBox,1个列表框和1个按钮。单击按钮时,列表框必须显示随机数字,最多为textbox1和textbox2的总和。例如;
5从textbox1输入,10从textbox2输入。 Sum当然是15,listbox必须显示15个随机数,但这些数字必须彼此不同。
我写了类似的东西,并使用Contains方法来检查是否有相同的值。但该程序冻结,并没有给出任何错误。
int a, b;
Random rnd = new Random();
int[] array;
private void button1_Click(object sender, EventArgs e)
{
a = Convert.ToInt32(textBox1.Text);
b = Convert.ToInt32(textBox2.Text);
int c = a + b;
array = new int[c];
for (int i = 0; i < array.Length; i++)
{
int number = rnd.Next(c);
foreach(int numbers in array)
{
if (array.Contains(numbers))
{
i--;
}
else
{
array[i] = number;
listBox1.Items.Add(array[i]);
}
}
}
我也没有foreach(仅包含部分我的意思)。也没工作。我在“别人”中写道;
array[i] += number;
它也没用。
如果你帮助我,我将非常感激。提前致谢。
您可以尝试使用do...while
而不是for loop
Random.Next
得到0
到c - 1
的值,所以rnd.Next(c + 1);
需要添加1
否则,循环不会停止。
var array = new int[c];
int number;
for (int i = 0; i < array.Length; i++)
{
do
{
number = rnd.Next(c + 1);
} while (array.Contains(number));
array[i] = number;
listBox1.Items.Add(array[i]);
}
而不是for循环,使用while循环:
int = 0;
while(i<c)
{
int random rnd.Next(c);
if(!array.Contains(random))
array[i++] = random;
}
你也可以创建1-15的数字列表然后随机播放(因为你的随机函数只会随机创建1-15的随机数):
array = Enumberable.Range(0,c).OrderBy(x => rnd.Next()).ToArray();
上面的代码要快得多,因为想象一下我们已经生成了14个随机数并且只剩下一个数字(例如5个),它必须经过多次循环才能生成最终生成的随机数等于5,但是上面的代码没有必要检查,我们只有所有数字,然后我们洗牌。
你基本上需要洗牌你的数据。创建包含所有值的集合:
var temp = Enumerable.Range(0, c);
现在随机订购
temp = temp.OrderBy(_ => rnd.Next());
现在你可以添加temp
到你的listBox
或者,作为单行:
listBox1.Items.AddRange(Enumerable.Range(0, c).OrderBy(_ => rnd.Next()));