C#用timer控件实现1~100随机数抽奖,已经抽中的不参与下一次循环,求代码

C#用timer控件实现1~100随机数抽奖,已经抽中的不参与下一次循环,求代码,哪位大神指点一下。... C#用timer控件实现1~100随机数抽奖,已经抽中的不参与下一次循环,求代码,哪位大神指点一下。 展开
 我来答
百度网友154139e
2016-11-25 · TA获得超过413个赞
知道小有建树答主
回答量:295
采纳率:50%
帮助的人:251万
展开全部

直接Random.Next(1, 101)可产生随机数,用一个List<int>存起来,每次新随机就会去这个List中找,如果找到就再随机,自到随机出新的数。

1、放一个TextBox框、要把MultiLine属性改成True。(模拟输出结果)

2、放个Timer

3、放个Button。

4、定义两个全局对象

int inTimer = 0;  //原子锁对象
List<int> DBList = new List<int>(); //集合

写Button的_Click事件就一句话了

private void button1_Click(object sender, EventArgs e)
{
    timer1.Enabled = true;  //开Timer
}

写Timer的Tick事件

private void timer1_Tick(object sender, EventArgs e)
{
    //加原子锁,由于随机可能时间过长,造成多线程进入,污染DBList对象
    if (Interlocked.Exchange(ref inTimer, 1) == 0)
    {
        Random rand = new Random(); //随机器
        int nums = 0;
        do
        {
            nums = rand.Next(1, 101); //1~100之间一个int
        } while (DBList.Where(a => a == nums).Count() > 0);
                
        DBList.Add(nums); //放到集合中

        //在textbox1中输入
        textBox1.Text = String.Join("\r\n", DBList.ToArray());

        if (DBList.Count == 100)  //100个数都出现了就关Timer
        {
            timer1.Enabled = false;
            MessageBox.Show("结束!");
        }
        Interlocked.Exchange(ref inTimer, 0);  //解原子锁
    }
}
更多追问追答
追问
原子锁我倒是不需要,我的页面是用一个button来点击开始和停止,Timer控制出来的随机数用label在页面滚动显示,停止的时候出来一个数,再开始滚动的时候这个数就不包括在里面了。求指点...
追答

你的意思就是timer1的作用,就是不停的随机出来数据,并显示到Label上,当你点按钮就停下来。其实真正随机是在按钮点停下来之后,会随一个1~100的数。对吧?

1、加全局List

List<int> DBList = new List<int>(); //集合

2、Timer_Tick事件

private void timer1_Tick(object sender, EventArgs e)
{
    Random rand = new Random();
    label1.Text = rand.Next(1, 101).ToString();  //不停的随机1~101
}

3、Button_Click

private void button1_Click(object sender, EventArgs e)
{   //按钮是个互斥的,你点一下是开始,再点一下是结束
    if (timer1.Enabled == true)
    {
        timer1.Enabled = false;  //结束时会真正随机一个数放到List
        if (DBList.Count < 100)
        {
            Random rand = new Random(); //随机器
            int nums = 0;
            do
            {
                nums = rand.Next(1, 101); //1~100之间一个int
            } while (DBList.Where(a => a == nums).Count() > 0);
            DBList.Add(nums); //放到集合中
            label1.Text = nums.ToString();
        }
        else
        {
            label1.Text = "100个数全随机出来了!";
        }
    }
    else 
    {
        timer1.Enabled = true; //开
    }
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式