Random В C#

Тема в разделе ".NET", создана пользователем AntiPlayer, 9 дек 2011.

  1. AntiPlayer

    AntiPlayer Гость

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

    Есть простенькое консольное приложение на 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">
    Код (Text):
    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">
    Код (Text):
    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#, либо же я и правда Олень :)
    Помогите, как лаконично и коротко обойти данный глюк(?). Я так понимаю, что Рандом в Си Диез как-то зависит от текущего времени, и так как программа выполняется в минимальный отрезок времени - он и генерирует одинаковый набор цифр.
     
  2. LuMee

    LuMee Well-Known Member

    Регистрация:
    2 май 2006
    Сообщения:
    477
    Симпатии:
    0
    Два варианта на выбор:

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

Поделиться этой страницей