ランダムを使用しても本当の乱数は生成されないことに気づきましたが、なぜこのコードが反復を防止しないのか理解できません。目標は、コードを実行中にエラーがありません0と44の間(および含まない)から8つの固有の番号を得ることであるが、リピートが発生した:非反復乱数のための再帰ループと整数配列の使用
//Loop Begins Within Main
for (int i = 0; i < 8; i++)
{
//Begins Recursion
int x = Unique8(rndm, num8);
num8[i] = x;
}
//Recursion Takes Place Outside of the Main with Static Declarations
static Random rndm = new Random();
static int[] num8 = new int[8];
static int Unique8 (Random rndm, int[] num8)
{
int x = rndm.Next(1, 43);
//Seeks if Number is Repeated
if (num8.Contains(x))
{
//If So, Recursion Takes Place
Unique8(rndm, num8);
}
//Returns Value to Original Loop to be Assigned to Array
return x;
}
ランダムための番号を再生している場合アルゴリズム、なぜ彼らは再帰を通過していますか?なぜこれは無限ループにならないのですか?
私は、デッキのシャッフルやトップからのカードの引き出しに似た、これに対する良い解決策を見つけました。オリジナルの並べ替えられた配列を作成するのは簡単ですが、どのようにシャッフルされているのか分かりません。あなたが障害
スレッドセーフではありません、[範囲内でNを生成し、ランダムでユニークな番号]のところで –
可能複製(http://stackoverflow.com:次に、あなただけの描いた番号を削除するList.RemoveAtを使用/ questions/4299138/generate-n-random-and-unique-numbers-within-a-range) –
これは無制限であるため、これを行うのは悪い方法です。それが終了するという保証はありません。 –