Random В C#

  • Автор темы AntiPlayer
  • Дата начала
A

AntiPlayer

#1
Здравствуйте, за мой вопрос можно меня сразу к Оленям помещать, но разобраться так и не смог.

Есть простенькое консольное приложение на C#:

<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Приложение</div></div><div class="sp-body"><div class="sp-content">
Код:
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
for (int m = 1; m < 10 ; m++)
{
Random rnd = new Random();
int b = rnd.Next(10);
int l = rnd.Next(10);
Console.WriteLine(b + " " + l );

}
Console.ReadKey();
}
}
}

Вот что выводит программа:
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Итог</div></div><div class="sp-body"><div class="sp-content">
7 5
7 5
7 5
7 5
7 5
7 5
7 5
7 5
7 5


При этом, если вставить в теле цикла Thread.Sleep(1000), то всё выводится как надо:
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">как надо</div></div><div class="sp-body"><div class="sp-content">
0 8
9 0
3 8
6 6
6 8
9 6
7 1
6 2
0 1


Как это исправить? Потому что пауза не вариант.

При этом в на Java всё просто идеально, учитывая, что код тот же самый:
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Java</div></div><div class="sp-body"><div class="sp-content">
Код:
class fact
{
public static void main(String[] args) 
{ 
for (int i=1;i<10;i++)
{
int b = (int)(10 * Math.random());
int c = (int)(10 * Math.random());
System.out.println(b+" "+c);	
}
}
}

Это всё-таки небольшой камень в огород C#, либо же я и правда Олень :)
Помогите, как лаконично и коротко обойти данный глюк(?). Я так понимаю, что Рандом в Си Диез как-то зависит от текущего времени, и так как программа выполняется в минимальный отрезок времени - он и генерирует одинаковый набор цифр.
 

LuMee

Well-known member
02.05.2006
477
0
#2
Два варианта на выбор:

1. менять seed у Random'а
Код:
for (int m = 1; m < 10; m++)
{
var rnd = new Radnom(m);
...
2. использовать один и тот же Random для всего цикла, чтобы он не переинициализировался:
Код:
var rnd = new Radnom();
for (int m = 1; m < 10; m++)
{
int b = rnd.Next(10);
...