问题描述
publicclassDrawOutTheme{publicRandomRandomizer;publicintValue;publicTextBoxTextBox=null;publicvoidRandomValue(){Randomizer=newRandom();Value=Randomizer.Next(1,100);TextBox.Text=Convert.ToString(Value);}}privatevoidbutton1_Click(objectsender,EventArgse){DrawOutTheme[]DrawOut=newDrawOutTheme[2];DrawOut[0]=newDrawOutTheme(){TextBox=textBox1};DrawOut[1]=newDrawOutTheme(){TextBox=textBox2};DrawOut[0].RandomValue();DrawOut[1].RandomValue();}当按buttion1时两个textbox的随机是相同的怎么按buttion时是两个textbox的随机数是不相同的求大神帮助
解决方案
解决方案二:
暂停线程
解决方案三:
privatevoidbutton1_Click(objectsender,EventArgse){inta=RandomValue();intb=RandomValue();while(a==b){b=RandomValue();}textBox1.Text=Convert.ToString(a);textBox2.Text=Convert.ToString(b);}publicintRandomValue(){returnnewRandom().Next(1,100);}
解决方案四:
之所以和一样,是因为你是同时创建DrawOutTheme,而且是同时调用RandomValue方法在中间加一句Thread.Sleep(100);但这样还是会出现一样的,只是几率下小一点DrawOutTheme[]DrawOut=newDrawOutTheme[2];DrawOut[0]=newDrawOutTheme(){TextBox=textBox1};DrawOut[0].RandomValue();Thread.Sleep(100);DrawOut[1]=newDrawOutTheme(){TextBox=textBox2};DrawOut[1].RandomValue();
解决方案五:
引用1楼javaoraspx的回复:
暂停线程
就是这个意思
解决方案六:
publicclassDrawOutTheme{publicRandomRandomizer=newRandom();publicintValue;publicTextBoxTextBox=null;publicvoidRandomValue(){Value=Randomizer.Next(1,100);TextBox.Text=Convert.ToString(Value);}}privatevoidbutton1_Click(objectsender,EventArgse){DrawOutTheme[]DrawOut=newDrawOutTheme[2];DrawOut[0]=newDrawOutTheme(){TextBox=textBox1};DrawOut[1]=newDrawOutTheme(){TextBox=textBox2};DrawOut[0].RandomValue();DrawOut[1].RandomValue();}将Randomizer=newRandom()这一句话放到publicRandomRandomizer=newRandom()即可
解决方案七:
引用4楼chinajiyong的回复:
引用1楼javaoraspx的回复:暂停线程就是这个意思
如何暂停线程??
解决方案八:
引用6楼hghjxzj的回复:
引用4楼chinajiyong的回复:引用1楼javaoraspx的回复:暂停线程就是这个意思如何暂停线程??
看3楼代码
解决方案九:
进来学习了,VC里面的redom记得可以指定一个参数
解决方案十:
随机数的种子默认情况下是取当前时间的,因为创建两个Random的时间几乎相同,所以产生的随机数也相同。有两个方法可以解决这个问题:1、用Random(int)这个构造函数为每个DrawOutTheme实例指定一个不同的值,比如可以利用Guid的随机性。Randomizer=newRandom(Guid.NewGuid().GetHashCode())2、所有DrawOutTheme实例共享一个Random对象,也就是将Randomizer提升为类的静态成员,然后在类的构造函数里取消对其赋值的操作。staticRandomizer=newRandom()
解决方案十一:
引用2楼porschev的回复:
C#codeprivatevoidbutton1_Click(objectsender,EventArgse){inta=RandomValue();intb=RandomValue();while(a==b){……
12313123
解决方案十二:
该回复于2012-03-23 09:40:23被版主删除
解决方案十三:
改成这样就可以了publicclassDrawOutTheme{publicRandomRandomizer;publicintValue;publicTextBoxTextBox=null;publicvoidRandomValue(){Value=Randomizer.Next(1,100);TextBox.Text=Convert.ToString(Value);}}privatevoidbutton1_Click(objectsender,EventArgse){Randomizer=newRandom();DrawOutTheme[]DrawOut=newDrawOutTheme[2];DrawOut[0]=newDrawOutTheme(){TextBox=textBox1};DrawOut[1]=newDrawOutTheme(){TextBox=textBox2};DrawOut[0].RandomValue();DrawOut[1].RandomValue();}