-3
modern fisher yates shuffle algorithmのC#コードを作成しようとしましたが、thisを使用したいのですが、それはあまりにも複雑なので、以下のコードに簡略化しましたが、エラーがあります」[エラー] FATAL UNHANDLED例外:System.IndexOutOfRangeException:インデックスが配列の範囲外でした。私は何が間違っているのか分からない。この2行が問題となっているfisher-yatesシャッフルアルゴリズムの配列エラー
using System;
class Program
{
static Random _random = new Random();
static void Shuffle(int[] array)
{
int p = array.Length;
for (int n = p; n > 1 ; n--)
{
int r = _random.Next(1, n);
int t = array[r];
array[r] = array[n];
array[n] = t;
}
}
static void Main()
{
int[] array = { 1, 2, 3, 4, 5, 6, 7, 8 };
Shuffle(array);
foreach (int value in array)
{
Console.WriteLine(value);
}
}
}
'n'の初期値は 'array.Length'で、ループ内では' array [n] 'のインデックスを作成しています。それは例外です。 –
C#の配列のインデックスはゼロです。したがって、エラーが消えるためにn = p-1から0にしてください。 –