C#检查数组中是否有相同的随机值

问题描述 投票:1回答:3

我想检查数组中是否有相同的值,如我在标题中提到的那样。如果有,我想传递该值并检查另一个随机值以添加到列表框。

在我的表单中,有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; 

它也没用。

如果你帮助我,我将非常感激。提前致谢。

c# arrays random
3个回答
2
投票

您可以尝试使用do...while而不是for loop

Random.Next得到0c - 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]);
}

3
投票

而不是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,但是上面的代码没有必要检查,我们只有所有数字,然后我们洗牌。


1
投票

你基本上需要洗牌你的数据。创建包含所有值的集合:

var temp = Enumerable.Range(0, c);

现在随机订购

temp = temp.OrderBy(_ => rnd.Next());

现在你可以添加temp到你的listBox

或者,作为单行:

listBox1.Items.AddRange(Enumerable.Range(0, c).OrderBy(_ => rnd.Next()));
© www.soinside.com 2019 - 2024. All rights reserved.