C# 输出错误。我的随机数在哪里?
我是编程新手,正在读一本关于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
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并将其保留为字段更好吗?如果按钮被按下很多次并且很快,这可能不是最好的方法?还是我弄错了?