Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查是否已生成随机数_C#_Winforms_Random - Fatal编程技术网

C# 检查是否已生成随机数

C# 检查是否已生成随机数,c#,winforms,random,C#,Winforms,Random,如何在WinForms中使用C生成6个随机但唯一的数字 我有以下代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;

如何在WinForms中使用C生成6个随机但唯一的数字

我有以下代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace LottoGenerator
{
    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Random rnd = new Random();
            int randnum = rnd.Next(1, 49); // creates a number between 1 and 49

            MessageBox.Show(Convert.ToString(randnum));
        }
    }
}
我想确保生成的随机数不是重复的随机数。如何编写逻辑来检查生成的数字是否与以前生成的另一个数字相同?如果是,则生成一个新数字


有意义吗?

您需要将生成的数字保存在内存中,然后将新生成的数字与内存中的集合进行比较

您可以使用在类级别定义的列表,将随机数存储在列表中,并检查列表中是否已经存在该随机数

List<int> list = new List<int>(); //defined at class level

private void button1_Click(object sender, EventArgs e)
{
    Random rnd = new Random();
    int randnum = rnd.Next(1, 49); // creates a number between 1 and 49

    if (!list.Contains(randnum))
    {
        list.Add(randnum);
    }
    else
    {
        //duplicate number
    }

    MessageBox.Show(Convert.ToString(randnum));
}
如果您想要6个数字,则可以执行以下操作:

Random rnd = new Random();
while (list.Count < 6)
{
    int randnum = rnd.Next(1, 49); // creates a number between 1 and 49

    if (!list.Contains(randnum))
    {
        list.Add(randnum);
    }
    else
    {
        //duplicate number
    }
}

添加新容器以存储已生成的值。然后在生成您的号码时检查它是否在您的列表中。如果是,则继续生成,直到其不在列表中。不过,由于您只能有49个不同的值,所以一旦生成了所有可能的值,您就必须进行某种其他检查

List<int> lstRan = new List<int>();

private void button1_Click(object sender, EventArgs e)
        {
        Random rnd = new Random();
        int randnum = rnd.Next(1, 49); // creates a number between 1 and 49
        while (lstRan.Contains(randnum)) 
               randnum = rnd.Next(1,49);

        lstRan.Add(randnum);

        MessageBox.Show(Convert.ToString(randnum));
    }

生成包含[1;49]个值的列表,将其洗牌并逐个获取元素

private List<int> list = null;

public Form1()
{
    InitializeComponent();
    Random rnd = new Random();
    list = Enumerable.Range(1, 49).OrderBy(r => rnd.Next()).ToList();
}    

private void button1_Click(object sender, EventArgs e)
{
    if (list.Count == 0)
        throw new InvalidOperationException();
    int randnum = list[list.Count - 1];
    list.RemoveAt(list.Count - 1);
    MessageBox.Show(randnum.ToString());
}

存储生成的数字列表,并继续生成,直到您得到一个不在列表中的数字。使用数组存储以前生成的数字,然后查看新数字是否已在该数组中。i+random可能存在重复错误,其中i=>1。。。这样他就不必检查,也不知道你说的i是什么意思,它是循环变量吗?此外,OP需要1,49范围内的随机数。因此,添加一个迭代编号可能会使范围无效。哦。/我没有阅读该部分。我以为他只是想要随机数。忽略我的评论,我只需要找出如何用6个中奖号码填充我的名单@PriceCheaperton,刚刚编辑了答案。在这种情况下,您将需要一个循环。这部分很有趣。OrderByr=>rnd.nextince这是一个您可以使用的单键单击。Take6yeah:-通过orderby newid在sql server中非常合法没有理由在这里不起作用。只是从来没用过-@是的,没错。以前在SQL中使用过这种结构。
list = Enumerable.Range(1, 49).OrderBy(r => rnd.Next()).Take(6).ToList();