, если у меня есть это: (я уже объявлял переменные)Как работают случайные числа от случайного объекта?
random1 = new Random();
Console.WriteLine(random1.Next(1, 100));
Console.WriteLine(random1.Next(1, 100));
Когда у меня есть, что она будет генерировать различное количество каждый раз, когда я называю Console.WriteLine, так что это будет генерировать отл. 10, 55, и если вы сделаете это снова 20,60, то в основном случайные числа каждый раз, хорошо. Но когда я добавляю это:
random2 = new Random();
Console.WriteLine(random1.Next(1, 100));
Console.WriteLine(random1.Next(1, 100));
Console.WriteLine(random2.Next(1, 100));
Console.WriteLine(random2.Next(1, 100));
Random1 будет генерировать те же числа, что и вкось! Так будет. 5,54,5,54, и если я сделаю это снова 70,34,70,34. Но это random2 - новый объект, так почему он генерирует те же цифры, что и random1 ??
Другой пример: Если у меня есть класс, как этот
class RandomNumber
{
Random random = new Random();
public int getrandomnumber { get { return random.Next(1, 5); } }
}
После выполнения этого
randomnumberobject = new RandomNumber();
randomnumberobject2 = new RandomNumber();
Console.WriteLine(randomnumberobject.getrandomnumber);
Console.WriteLine(randomnumberobject2.getrandomnumber);
Они генерируют случайное число, но оба они будут генерировать точно такое же случайное число , Так что в первый раз я получу это 5,5 секунды, это 3,3 и так далее. Но если изменить класс этого
class RandomNumber
{
Random random;
public int getrandomnumber { get { return random.Next(1, 5); } }
public RandomNumber(Random random) { this.random = random; }
}
И сделать это вместо того, чтобы
random = new Random();
randomnumberobject = new RandomNumber(random);
randomnumberobject2 = new RandomNumber(random);
Console.WriteLine(randomnumberobject.getrandomnumber);
Console.WriteLine(randomnumberobject2.getrandomnumber);
Внезапно оба они генерируют различные случайные числа! Так почему это происходит? В чем причина? Имейте в виду, я все еще новичок.
Посмотрите на [Docs] (http://msdn.microsoft.com/en-us/library/system.random.aspx), в частности, второй абзац раздела замечает: «По умолчанию, безразмерный конструктор класса Random использует системные часы для генерации своего начального значения, тогда как его параметризованный конструктор может принимать значение Int32 в зависимости от количества тиков в текущее время. Однако, поскольку часы имеют конечное разрешение, использование конструктора без параметров создавать разные случайные объекты в непосредственной последовательности создает генераторы случайных чисел, которые производят идентичные последовательности случайных чисел » – RobH
Посмотрите на случайные числа посева. Там все. Бывают случаи, когда вы хотите получить одну и ту же последовательность случайных чисел каждый раз, и есть моменты, когда вы этого не делаете. –