0

我正在尝试创建一个包含 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个数字组合。整个过程只改变三倍,我注意到的另一件事是,如果我将输出放在消息框中,它会完美运行。但不是当我尝试将其写入文件时。

我希望有人可以帮助解决我的问题。

谢谢。

嗨,再次感谢,在阅读下面的帖子并获得更多文档后,我找到了问题的根源,这就是我生成随机数的方式,正如你们所说。

公共 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();” 从这种方法及其现在的工作完美。

多谢。

4

1 回答 1

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; 
} 
于 2013-04-22T08:44:03.170 回答