2

私はプログラミングが初めてで、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);
            }
        }
    }
}

出力は次のとおりです。 ここに画像の説明を入力

リストビューに乱数がランダムな順序で表示されないのはなぜですか?

4

5 に答える 5

1

の後の 5 を取り出しRandom()ます。これはシード値です。デフォルトのコンストラクターを使用するだけです。

Seed - 一連の乱数を生成するための開始点を設定するために使用される整数。シードは、ジェネレーターをランダムな開始点に設定します。一意のシードは、一意の乱数シーケンスを返します。

毎回シードとして 5 を使用しているため、繰り返し数が得られます。

   Random rd = new Random();
于 2013-10-14T13:14:17.647 に答える
1

ランダムなインスタンスを常に同じ番号でシードしています5。これにより、繰り返し番号が発生します。デフォルトのコンストラクターを使用するだけです。

Random rd = new Random();

この動作を正確に示すMSDNの例を見てください。

ちなみに、これもよくある落とし穴です。シードは現在の時間から作成されるため、(ループ内で) 常に新しいインスタンスを作成するのではなく、常に同じランダム インスタンスを再利用する必要があります。乱数を非常に高速に作成すると、同じシードが得られ、数値が繰り返されます。

于 2013-10-14T13:15:11.730 に答える