0

スペースで区切られた 1000 行の乱数を含むファイルを作成しようとしています。これは、宝くじの数字をシミュレートするためのものです。6 int の配列で 6 つの数値の組み合わせを処理するクラスを作成します。

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;
    }

}

私が言ったように、ランダムに選択された6つの数字の配列で1000行の組み合わせを作成する必要があります。したがって、コードのある時点で、次のようなものが得られました。

 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つの数字の同じ組み合わせを何度も繰り返します。変更はプロセス全体の 3 倍程度です。もう 1 つのことは、出力をメッセージ ボックスに入れると完全に機能することです。しかし、ファイルに書き込もうとしたときではありません。

誰かが私の問題を解決してくれることを願っています。

ありがとう。

こんにちは、ありがとうございます。以下の投稿を読んでより多くのドキュメントを入手した後、私は問題の種にたどり着きました。

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();」というインスタンスを実行した場合、単純に行を削除します。この方法から、今では完璧に機能しています。

どうもありがとう。

4

1 に答える 1

1

ランダム生成関数が実際のランダムを生成していない可能性が非常に高いです。

呼び出しごとに新しいランダム (シードと同じ時間を使用する) を作成して、常に同じ「乱数」コレクションを取得するとします。

あなたの objGenerator.generaNumero() メソッドを投稿してください

Random クラスの使用方法: MSDN

彼らが示す例を確認してください。2つのランダムが同時に作成され、同じ出力が生成されることがわかります。

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 に答える