我正在尝试创建一个由空格分隔的1000行随机数的文件。这只是为了模拟乐透机器的数量。我创建了一个类,它将处理6 int数组中的六个数字的组合。
class cTicket
{
//Propiedades
private volatile int[] p_nums;
//Constructor
public cTicket()
{
}
//Metodos
public void setTicket(int[] o_nums)
{
p_nums = o_nums;
}
public int[] getTicket()
{
return p_nums;
}
}
像我说的那样,我需要创建一个1000行的组合,并以随机的方式选择6个数字的数组。所以在代码的某些方面我得到了这样的东西:
private void button2_Click(object sender, EventArgs e)
{
for (int i = 0; i < 1000; i++) // Bucle de 1,000 combinaciones
{
objTicket.setTicket(objGenerador.generaNumero());
//MessageBox.Show(integerArrayString(objTicket.getTicket()));
write.WriteLine(i + integerArrayString(objTicket.getTicket()));
}
write.Close(); // Cierra operacion de escritura del archivo
}
但这部分根本不起作用。它一遍又一遍地重复相同的6个数字组合。只改变整个过程的三倍,我注意到的另一件事是,如果我将输出放在消息框中,它就完美了。但是当我尝试将其写入文件时却没有。
我希望有人可以帮我解决问题。
感谢。
嗨,再次感谢,在阅读下面的帖子并获得更多文档后,我得到问题的结果,这就是我生成ramdom数字的方式,就像你说的那样。
public int [] generaNumero() {
Random obj = new Random();
int v_idx;
for (int x = 0; x < 6; x++)
{
v_idx = x;
v_array[x] = obj.Next(1, 38);
while (v_idx >= 0)
{
if (v_array[x] == v_array[v_idx])
{
v_array[x] = obj.Next(1, 38);
v_idx = x;
}
v_idx--;
}
}
return v_array;
我只是简单地删除了我做的事情“Random obj = new Random();”从这种方法和它现在的完美工作。
非常感谢。
答案 0 :(得分:1)
你的随机生成函数很可能无法生成真正的随机数。
我想象一下,你为每个电话创建一个新的随机(它与种子同时使用),所以你总是得到相同的“随机”数字集合
发布你的objGenerador.generaNumero()方法
如何使用Random类:MSDN
检查他们显示的示例,在那里你可以看到两个随机创建的同时产生相同的输出。
private static Random _Random = new Random();
public int[] generaNumero()
{
int v_idx;
for (int x = 0; x < 6; x++)
{
v_idx = x;
v_array[x] = _Random.Next(1, 38);
while (v_idx >= 0)
{
if (v_array[x] == v_array[v_idx])
{
v_array[x] = _Random.Next(1, 38);
v_idx = x;
}
v_idx--;
}
}
return v_array;
}