2

我是编程新手,我正在读一本关于 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);
            }
        }
    }
}

这是输出: 在此处输入图像描述

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

4

5 回答 5

1

取出 后的 5 Random(),即为种子值。只需使用默认构造函数:

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

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

   Random rd = new Random();
于 2013-10-14T13:14:17.647 回答
1

您总是用相同的数字播种随机实例5。这会导致重复数字。您只需要使用默认构造函数:

Random rd = new Random();

看看MSDN上的例子,它准确地显示了这种行为。

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

于 2013-10-14T13:15:11.730 回答
0

您每次都在这条线上使用相同的种子 (5)Random rd = new Random(5);

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

Random rd = new Random();
于 2013-10-14T13:16:28.657 回答
0

如果您在循环Random.Next外部和内部进行调用,则输出是合乎逻辑的。jItems.Add

我建议将Items.Add呼叫移到循环后面。j

于 2013-10-14T13:16:33.390 回答
0

声明没有种子的随机类。

 Random rd = new Random();
于 2013-10-14T13:17:50.347 回答