首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#随即产生数。分数100.解决办法

2012-01-12 
C#,随即产生数。分数100.急!!!!我要做一个小项目,需求是:点击开始,数字(1--38)一直跳动,当点击停止时,在对

C#,随即产生数。分数100.急!!!!
我要做一个小项目,需求是:
点击开始,数字(1--38)一直跳动,当点击停止时,在对应的文本框中产生一个数字(1到38中的任意一个)。

改如何去实现,用什么方法实现?线程?还是其他。请大家具体为我讲解一下,谢谢了!

[解决办法]
Timer+Random
[解决办法]
放一个 timer就可以让它不能不停去取1--38随机数,然后刷新Lable的 Text就可以了,点击button就是让timer停下来
[解决办法]
在编程中经常遇到一些类似的问题,比如做一个双色球选号软件,其中6个双色球是从1到33之间选出6个数来,这6个数是不能重复的,这个问题就是我们今天要说的生成不重复数算法。
算法描述如下:从M个数中选出N个数来(0<N<=M),要求N个数之间不能有重复。
这个问题我以前用J2SE实现过,使用了ArrayList,每次随机在指定范围内选定一个数,然后查看结果集合中是否存在该数,如果存在继续下一轮循环,如果不存在,就将该数保存到结果集合中去。使用这种算法虽然也能实现要求,缺点是判断结果集合中是否存在该数时,需要通过一个循环来判断,这会增加算法运行的时间,虽然时间复杂度为n,但多次重复,还是一笔不小的开销。

下面要介绍的算法是,每次随机取出一个数,之后将该数放置到集合的末尾去,这样下次取随机数的时候,只从1到目标集合个数-1个中随机抽取,如此循环,这样就避免了判断在结果集合中判断是否存在相冲突的数的过程。

算法代码如下:

C# code
using System;using System.Collections.Generic;using System.Text;using System.Diagnostics;using System.Management;namespace ConsoleApplication{    class Program    {        static void Main(string[] args)        {            int[] range = new int[33];            for (int i = 0; i < 33; i++)//初始化范围集合,从1到33            {                range[i] = i + 1;            }            int[] result = CreateNumbers(range, 6);            for(int i=0;i<result.Length;i++)            {                Console.WriteLine("result[{0}]={1}", i, result[i]);            }            Console.ReadKey();        }          //取出不重复的6个数    static int[] CreateNumbers(int[] range, int count)        {            int[] result = new int[count];            Random random=new Random();            int index = 0;            int temp = 0;            for (int i = 0; i < count; i++)            {                index=random.Next() % (range.Length-i);                result[i] = range[index];                //将当前已使用过的数移至集合末尾,并且将末尾原来没有使用的数放到当前位置                temp = range[range.Length - 1-i];                range[range.Length - 1-i] = range[index];                range[index]=temp;            }            return result;        }           }}
[解决办法]
C# code
//拉一个Timer控件到窗体        Random rnd=new Random(unchecked((int)DateTime.Now.Ticks));//声明一个全局变量        private void timer1_Tick(object sender, System.EventArgs e)//添加Timer的Tick事件        {            this.label1.Text=rnd.Next(1,39).ToString();        }        private void btnStart_Click(object sender, System.EventArgs e)//开始按钮        {            this.timer1.Start();        }        private void btnEnd_Click(object sender, System.EventArgs e)//结束按钮        {            this.timer1.Stop();        }
[解决办法]
mark
[解决办法]
很久很久以前做的一个双色球,拿出主要的给你看看,现在怎么这么多爱发两个一模一样帖子的啊
C# code
 private void timer2_Tick(object sender, System.EventArgs e)        {            Random a=new Random();            int i1=a.Next(1,33);            if(i1<10)            {                this.textBox1.Text="0"+i1.ToString();            }            else            {                this.textBox1.Text=i1.ToString();            }            int i2=a.Next(1,33);            if(i2<10)            {                this.textBox2.Text="0"+i2.ToString();            }            else            {                this.textBox2.Text=i2.ToString();            }            int i3=a.Next(1,33);            if(i3<10)            {                this.textBox3.Text="0"+i3.ToString();            }            else            {                this.textBox3.Text=i3.ToString();            }            int i4=a.Next(1,33);            if(i4<10)            {                this.textBox4.Text=")"+i4.ToString();            }            else            {                this.textBox4.Text=i4.ToString();            }            int i5=a.Next(1,33);            if(i5<10)            {                this.textBox5.Text="0"+i5.ToString();            }            else            {                this.textBox5.Text=i5.ToString();            }            int i6=a.Next(1,33);            if(i6<10)            {                this.textBox6.Text="0"+i6.ToString();            }            else            {                this.textBox6.Text=i6.ToString();            }            int i7=a.Next(1,16);            if(i7<10)            {                this.textBox7.Text="0"+i7.ToString();            }            else            {                this.textBox7.Text=i7.ToString();            }        } 


[解决办法]

C# code
       private void button1_Click(object sender, EventArgs e)        {            timer1.Start();        }        private void timer1_Tick(object sender, EventArgs e)        {            Random r = new Random();            int t = r.Next(1, 39);            this.textBox1.Text = t.ToString();        }        private void button2_Click(object sender, EventArgs e)        {            timer1.Stop();        } 

热点排行