2016-06-07 5 views
0

У меня есть форма, содержащая список и четыре переключателя. Каждый переключатель позволяет добавить определенное количество номеров в список (100, 1000, 10000 и 100 000). Я пытаюсь применить алгоритм Shuffle Fisher-Yates, чтобы гарантировать, что в массиве нет повторяющихся чисел. Я пробовал все, что было предложено в Интернете, и мало что помогает. Когда я запускаю свой код ниже, в списке отображаются только нули, а не числа 1-100, которые перетасовываются. Есть что-то, чего я не хватает или что-то, что я делаю неправильно?Fisher-Yates Shuffle в списке? C# Windows Forms

private void randNumGenerator(int Size) 
    { 
     Numbers.Items.Clear(); 
     array = new int[Size]; 

     Shuffle(array); 

     foreach(int value in array) 
     { 
      Numbers.Items.Add(value); 
     } 
    } 
    #endregion 

    #region Shuffle Algorithm 
    static Random numGenerator = new Random(); 
    static void Shuffle(int[] array) 
    { 
     for (int i = array.Length - 1; i >= 0; i--) 
     { 
      int r = numGenerator.Next(0, i); 
      int temp = array[r]; 
      array[r] = array[i]; 
      array[i] = temp; 
     } 
    } 
    #endregion 
+0

'массива = новый INT [размер]; Shuffle (array); 'вы посылаете массив нулей, чтобы перетасовать здесь. результат отображается правильно. попробуйте использовать цикл 'for' для заполнения массива цифрами – ASh

ответ

1

Попробуйте изменить строку:

array = new int[Size]; 

To:

array = Enumerable.Range(0, Size).ToArray(); 
+0

Как ни странно, это сработало! Спасибо! – HylianSith