2010-10-13 3 views
0

Я пытаюсь создать два случайных числа: один для строки и один для столбца.Правильная реализация генератора случайных чисел C#

В этом точном экземпляре это многомерный массив с 4 строками и 4 столбцами. Таким образом, генератор чисел может использовать значения от 0 до 3 для строк и столбцов.

Я также должен убедиться, что дублирующих точек нет, поэтому, если в первый раз выбран [0,0], [0,0] не может быть использован снова.

Когда я реализую свое решение и распечатываю результаты, требуется время для C# для генерации рабочего набора чисел: LONG.

Например, я ищу только на 10 номеров из 16 возможностей в этом случае, и это то, что выход был похож:

[1,1] 
// {snip 26 times} 
[3,3] 
// {snip 76 times} 
[0,0] 
// {snip 83 times} 
[2,2] 
// {snip 69 times} 
[0,0] 
// {snip 84 times} 
// {etc...} 
[0,1] // which is a valid number 

Почему это найти [0,0] в виде набора случайные числа 84 раза подряд? Не использует ли она локальную энтропию моей системы или что?

Вот соответствующий код:

private static void RandomlyAssignSeat(string name, string[,] seatingArray) 
{ 
    int row, col; 

    // loop until seat is not reserved, then reserve it 
    do 
    { 
     // generate random row 
     row = RandomNumber(0,seatingArray.GetLength(0)); 

     // generate random column 
     col = RandomNumber(0,seatingArray.GetLength(1)); 

     Console.WriteLine("[" + row + "," + col + "]"); 
    } while (ReserveSeat(row, col, name, seatingArray) == false); 
} // end method RandomlyAssignSeat 

с RandomNumber глядя, как так:

private static int RandomNumber(int min, int max) 
{ 
    Random random = new Random(); 
    return random.Next(min, max); 
} // end method RandomNumber 

Я считаю, что становится особенно задохнулся 90 записей с максимальным набором 16x6 (или 96 записей)

+0

Надеюсь, что в 'ReserveSeat' нет условий гонки ... – icktoofay

ответ

4

Создайте Random экземпляр один раз в RandomlyAssignSeat и передайте его в качестве аргумента функции RandomNumber.

Чтобы получить, почему вы должны делать в этом случае - посмотреть на первый образец в http://msdn.microsoft.com/en-us/library/system.random.aspx

+0

Изменение RandomlyAssignSeat от использования моего собственного метода RandomNumber для запуска 'Random random = new Random();' а затем «row = random.Next (0, sitArray.GetLength (0)); и 'col = random.Next (0, sitArray.GetLength (1)); работал намного быстрее. Спасибо. – bafromca

+0

неработающий ссылка .... – yonan2236

+0

@ yonan2236: нет, это работает – zerkms

0

Или сделать случайной Экземпляр одиночки. Подпись вашего метода RandomNumber не изменится.

Смежные вопросы