如何随机数不重复?

时间:2022-10-20 09:50:57
刚学c#,很烦人。都不知道如何入手。请各位指点迷津。
我想做一个7位数的随机显示。(刚学几天)但是发现点button后,偶尔会有重复现象。请问如何解决?
namespace numbers
{
    public partial class main : Form
    {
        public main()
        {
            InitializeComponent();
        }
        Random ra = new Random();
        private void fivebutton_Click(object sender, EventArgs e)
        {
            int aa,bb,cc,dd,ee,ff,gg;
            aa= ra.Next(0, 50);
            bb = ra.Next(0, 50);
            cc = ra.Next(0, 50);
            dd = ra.Next(0, 50);
            ee = ra.Next(0, 50);
            ff = ra.Next(0, 50);
            gg = ra.Next(0, 50);
            ftbox1.Text = aa.ToString();
            ftbox2.Text = bb.ToString();
            ftbox3.Text = cc.ToString();
            ftbox4.Text = dd.ToString();
            ftbox5.Text = ee.ToString();
            ftbox6.Text = ff.ToString();
            ftbox7.Text = gg.ToString();

        }

7 个解决方案

#1


加个条件
if(Random.Next(i)==Random.Next(y)){...}

#2


请问能详细点吗?你这样只能比较2个不重复的,但是我有这么多7个数字要显示。怎么用if来做条件判断呢?
因为我自己学了几天,不太懂。麻烦你了

#3


Random ra = new Random(datetime.tostring()); 
带上当前时间参数。。只要时光不倒流一般不重复。。

#4


给一分 真大方...

#5


Random()默认就是使用时间作为随机发生器的种子的,在大量使用随机数的时候,ticks还没来得及改变,现在我们常用的随机发生器都是伪随机数字,是需要种子的,在种子一样时,产生的随机序列是一样的,因此随机数也就不随机了,再每次取随机数之前,我们暂停一毫秒
System.Threading.Thread.Sleep(1);
------------------------------------------------------ 
example:System.Random random = new Random();
        
        System.Threading.Thread.Sleep(1);

        int s = random.Next();


也可以试一试 可以试一试 System.Security.Cryptography.RNGCryptoServiceProvider ,性能就没有 System.random 快了。

#6


引用 3 楼 lijie__520 的回复:
Random ra = new Random(datetime.tostring());
 带上当前时间参数。。只要时光不倒流一般不重复。。


但是我照你这样写,不行哦。说没有TOSTRING这个东西。我晕了

#7


引用 5 楼 cnsjd 的回复:
Random()默认就是使用时间作为随机发生器的种子的,在大量使用随机数的时候,ticks还没来得及改变,现在我们常用的随机发生器都是伪随机数字,是需要种子的,在种子一样时,产生的随机序列是一样的,因此随机数也就不随机了,再每次取随机数之前,我们暂停一毫秒
 System.Threading.Thread.Sleep(1);
 ------------------------------------------------------
 example:System.Random random = new Random();

         System.Threading.Thread.Sleep(1);

         int s = random.Next();


 也可以试一试 可以试一试 System.Security.Cryptography.RNGCryptoServiceProvider ,性能就没有 System.random 快了。


为什么我照抄你的System.Threading.Thread.Sleep(1);这个上去。但是说1前面的(这个标记无效呢?

#1


加个条件
if(Random.Next(i)==Random.Next(y)){...}

#2


请问能详细点吗?你这样只能比较2个不重复的,但是我有这么多7个数字要显示。怎么用if来做条件判断呢?
因为我自己学了几天,不太懂。麻烦你了

#3


Random ra = new Random(datetime.tostring()); 
带上当前时间参数。。只要时光不倒流一般不重复。。

#4


给一分 真大方...

#5


Random()默认就是使用时间作为随机发生器的种子的,在大量使用随机数的时候,ticks还没来得及改变,现在我们常用的随机发生器都是伪随机数字,是需要种子的,在种子一样时,产生的随机序列是一样的,因此随机数也就不随机了,再每次取随机数之前,我们暂停一毫秒
System.Threading.Thread.Sleep(1);
------------------------------------------------------ 
example:System.Random random = new Random();
        
        System.Threading.Thread.Sleep(1);

        int s = random.Next();


也可以试一试 可以试一试 System.Security.Cryptography.RNGCryptoServiceProvider ,性能就没有 System.random 快了。

#6


引用 3 楼 lijie__520 的回复:
Random ra = new Random(datetime.tostring());
 带上当前时间参数。。只要时光不倒流一般不重复。。


但是我照你这样写,不行哦。说没有TOSTRING这个东西。我晕了

#7


引用 5 楼 cnsjd 的回复:
Random()默认就是使用时间作为随机发生器的种子的,在大量使用随机数的时候,ticks还没来得及改变,现在我们常用的随机发生器都是伪随机数字,是需要种子的,在种子一样时,产生的随机序列是一样的,因此随机数也就不随机了,再每次取随机数之前,我们暂停一毫秒
 System.Threading.Thread.Sleep(1);
 ------------------------------------------------------
 example:System.Random random = new Random();

         System.Threading.Thread.Sleep(1);

         int s = random.Next();


 也可以试一试 可以试一试 System.Security.Cryptography.RNGCryptoServiceProvider ,性能就没有 System.random 快了。


为什么我照抄你的System.Threading.Thread.Sleep(1);这个上去。但是说1前面的(这个标记无效呢?