在标签框中生成随机数
本文关键字:随机数 标签 | 更新日期: 2023-09-27 17:56:27
我正在尝试在 c# 中生成随机数。当我单击按钮时,标签Box1 应该在给定的 rnage 中显示随机数,一旦完成,labelBox2 应该做同样的事情。I 数字应从 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();
}
您的代码只有 7 行,但仍然存在相当多的问题。
我看看:
-
你需要清晰和准确!一台愚蠢的机器将不得不按照你的指示进行操作。在这里,七名SO成员试图猜测你想做什么,但或多或少失败了!
-
您应该将代码划分为具有明确名称且彼此之间很少或没有依赖关系的小函数。
-
这将(希望)导致可重用的代码。
-
您不应该将任何严肃的逻辑编码到事件中。相反,只建议进行一些检查和调用函数方法。
您似乎想要生成随机数对并将它们显示在两个标签中。
因此,我首先决定生成和显示是否应该进入单独的功能。对于除了最微不足道的问题之外的任何问题,情况绝对应该是这样。它被称为Model-View
分离。但是我们的情况很简单,可以将它们归为一个函数:
void MakeAndShowRandomPair()
我们可以在每次单击按钮时调用它:
private void button1_Click(object sender, EventArgs e)
{
MakeAndShowRandomPair();
}
现在是随机数的生成。随机数生成器对象有两个构造函数,一个带有seed
你可以选择控制序列的开始位置;这将创建一个可重复的序列。另一个没有参数,使用当前时间作为其种子。一个常见的错误是生成 Random 对象的速度太快,以至于它们的创建时间戳与其种子相同。那些总是产生相同的数字。
所以我们只在类级别生成一次:
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
!因此,我们已经看到了可重用代码的好处。