-1

このコードは毎回ランダムな出力を出しますが、何らかの理由で出力は非常に似ています: これはコードです:

using System;
using System.Collections.Generic;
namespace dimensionrandomwalk
{
    class MainClass
    {
        public static void Main (string[] args){

            for(int p = 0; p<100; p++){
        {
            Random rnd = new Random();
            int[] x;
            x = new int[500];
            for (int i = 0; i < 500; i++){
                int L = rnd.Next (0, 2);

                x[i] = (L==0) ? -1 : 1;
            }

            int total_value = 0;
            for (int i = 0; i < 500; i++)
                 total_value += x[i];

                 Console.WriteLine ("Total: " + total_value);
                 }
     }
    }
 }
}

これは出力です: http://gyazo.com/a0f11edd17eff6dde8523ac4dbf19629.png

助けてください。

4

3 に答える 3

3

Jon Skeet は、彼の のこの記事でこの問題について説明しています。中心的な問題は次のとおりです。

同じ初期状態 (シードを介して提供可能) で Random のインスタンスを開始し、同じシーケンスのメソッド呼び出しを行うと、同じ結果が得られます。

では、サンプル コードのどこが間違っていたのでしょうか。ループの反復ごとに Random の新しいインスタンスを使用していました。Random のパラメーターなしのコンストラクターは、現在の日付と時刻をシードとして受け取ります [...]

于 2013-11-08T11:07:01.090 に答える
3

new Random()Random時間に基づいてシードされた新しいオブジェクトを作成します。ループは 1 秒間に何度も実行されるため、実際には変化していません。代わりに、Random オブジェクトを 1 回作成し、同じオブジェクトを何度も呼び出す必要があります。これにより、同じ値を取得する代わりにテーブル内を移動し、必要な疑似乱数値が得られます。

于 2013-11-08T11:07:37.837 に答える
1

このコードで何をしたいかを説明していません。500 回生成するか、または最後に500 個すべての数字を追加したいようです-1+1

500個の配列に違いが含まれている間に同じ値を返す多くの状況があるため、なぜそうしているのかわかりません。比較 (500 ではなく 5 要素に簡略化):

{ +1, +1, -1, -1, +1 },
{ +1, -1, +1, -1, +1 },
{ -1, +1, -1, +1, +1 },
{ -1, -1, +1, +1, +1 }

+1計算するループで合計すると、4 つすべてが返されますtotal_value。したがって、これを何度呼び出しても、結果はそれほど変わりません。

おそらく、最終的な目標が何であるかを説明すれば、より良い答えが得られるでしょう。

于 2013-11-08T11:02:37.507 に答える