【问题标题】:Wrong output. Where is my random numbers?错误的输出。我的随机数在哪里?
【发布时间】:2013-10-22 01:34:57
【问题描述】:

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

这是输出:

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

【问题讨论】:

    标签: c# listview for-loop random


    【解决方案1】:

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

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

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

       Random rd = new Random();
    

    【讨论】:

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

    声明你的随机类没有种子。

     Random rd = new Random();
    

    【讨论】:

      【解决方案3】:

      如果您在j 循环之外调用Random.Next 并在其中调用Items.Add,则输出是合乎逻辑的。

      我建议将Items.Add 调用置于j 循环之后。

      【讨论】:

        【解决方案4】:

        您每次都使用相同的种子 (5) 与此行 Random rd = new Random(5);

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

        Random rd = new Random();
        

        【讨论】:

          【解决方案5】:

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

          Random rd = new Random();
          

          查看MSDN 上的示例,该示例正好显示了这种行为。

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-05-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多