我试图在c#中生成随机数。当我点击按钮时,lableBox1会在给定的rnage中显示随机数,一旦完成,labelBox2应该这样做。 我的数字应该从0到1000开始递增。我应该能够一次看到一个标签箱中数字的变化。数字应该从0开始,可以随机停在1000以内的任何地方。
我试着去做。但是当我点击一个按钮时,我立即在标签盒中得到随机数字。
我担心的是每个标签盒应该逐个开始生成系列。数字应该以递增的随机顺序从0开始显示,并在1000的任何地方停止;
private void button1_Click(object sender, EventArgs e)
{
Random rnd = new Random();
int c = rnd.Next(100);
label1.Text = c.ToString();
Random rng = new Random();
int d = rng.Next(2875);
label2.Text = d.ToString();
}
答案 0 :(得分:0)
您的代码只有7行但仍有相当多的问题。
让我们看看:
你需要清晰准确!一个愚蠢的机器将必须按照你的指示..这里七个 SO成员hace试图猜测你想做什么,或多或少失败!
您应该将代码划分为具有明确名称且彼此之间很少或没有依赖关系的小函数。
这将(希望)导致可重复使用的代码..
您不应将任何严肃的逻辑编码到事件中。相反,只推荐几个检查和调用功能方法。
您似乎想要生成一对随机数并将它们显示在两个标签中。
所以我首先决定生成和显示是否应该进入单独的函数。对于除了最微不足道的问题之外的任何问题,情况应该是这样的。它被称为Model-View
分离。但是我们的情况很简单,可以将它们归为一个函数:
void MakeAndShowRandomPair()
我们可以在每次点击按钮时调用它:
private void button1_Click(object sender, EventArgs e)
{
MakeAndShowRandomPair();
}
现在用于随机数字的创建。随机数genarator对象有两个构造函数,一个带有seed
,你可以选择控制序列应该从哪里开始;这创造了一个可重复的序列。另一个没有参数,使用当前时间作为其种子。一个常见的错误是生成随机对象,因此快速,它们是使用相同的时间戳创建的。那些总会生成相同的数字..
所以我们只在班级一级产生一次:
public Form1()
{
InitializeComponent();
}
Random rand = new Random();
现在为功能本身。你想要数字提升。有两种方法可以实现这一目标:
我决定使用后一种方法,所以我需要一些变量:
int r1 = 0;
int r2 = 0;
int step1 = 10;
int step2 = 287;
void MakeAndShowRandomPair()
{
// increase by random steps but at least 1:
r1 += rand.Next(step1) + 1;
r2 += rand.Next(step2) + 1;
// display
label1.Text = r1.ToString();
label2.Text = r2.ToString();
}
请注意,变量名称对于较长的程序来说太短了!对于任何事情,除了这样一个小问题的时间更长,富有表现力的名称是强制性的!
现在每次点击都应该为每个Label
填充一个更大的数字。
但也许有些评论员是对的,你真的想让这种情况自动发生?
在这种情况下,按钮会启动(并且可能会停止)Timer
并在Timer.Tick
事件中猜猜 - 你会调用同一个函数MakeAndShowRandomPair
!所以我们已经看到了可重用代码的好处..