C# 输出错误。我的随机数在哪里?

C# 输出错误。我的随机数在哪里?,c#,listview,for-loop,random,C#,Listview,For Loop,Random,我是编程新手,正在读一本关于C的书。这段代码没有输出我所期望的结果 代码如下: public partial class Form1 : Form { static string stars = "****************************************************************"; const int MAXVAL = 52; const int MAXELEMENTS = 100; int[] data = ne

我是编程新手,正在读一本关于C的书。这段代码没有输出我所期望的结果

代码如下:

public partial class Form1 : Form
{
    static string stars = "****************************************************************";
    const int MAXVAL = 52;
    const int MAXELEMENTS = 100;

    int[] data = new int[MAXELEMENTS];

    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        int i;
        Random rd = new Random(5);
        int j;
        string buff;

        for (i = 0; i < data.Length; i++)
        {
            data[i] = rd.Next(MAXVAL);
            buff = " ";
            for (j = 0; j < data[i]; j++)
            {
                buff += "*";
                lstResult.Items.Add(data[i].ToString() + " " + buff);
            }
        }
    }
}
公共部分类表单1:表单
{
静态字符串星号=“*******************************************************************************************************”;
常量int MAXVAL=52;
常量int最大元素=100;
int[]数据=新的int[MAXELEMENTS];
公共表格1()
{
初始化组件();
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
int i;
随机rd=新随机(5);
int j;
琴弦浅黄色;
对于(i=0;i
以下是输出:


为什么列表视图中没有随机顺序的随机数?

取出
random()
后面的5,这是种子值。只需使用默认构造函数:

种子-用于设置生成一系列随机数的起点的整数。种子将生成器设置为随机起点。唯一种子返回唯一的随机数序列

因为你每次都使用5作为种子,所以你会得到重复的数字

   Random rd = new Random();

您总是使用相同的编号
5
对随机实例进行种子设定。那会导致重复的数字。您只需使用默认构造函数:

Random rd = new Random();
请看一个例子,它正好显示了这种行为


顺便说一下,这也是一个常见的陷阱,您应该始终重用相同的随机实例,而不是始终创建一个新实例(在循环中),因为种子是从当前时间创建的。如果你很快创建随机数,你会得到相同的种子,这会导致重复的数字。

你每次都使用相同的种子(5),这行
Random rd=new Random(5)

使用默认构造函数生成随机数:

Random rd = new Random();

如果您随机执行
操作,则输出是合乎逻辑的。接下来
j
循环和
项之外调用。在循环中添加


我建议移动
项。在
j
循环后面添加
调用。

声明您的随机类,不带种子

 Random rd = new Random();

我认为在“data[I]=rd.Next(MAXVAL);”中生成的数字/s不应该在构造函数中声明Random并将其保留为字段更好吗?如果按钮被按下很多次并且很快,这可能不是最好的方法?还是我弄错了?