ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Слишком быстрый Random (C#)
  #1  
Старый 07.04.2010, 15:33
skivan
Новичок
Регистрация: 07.09.2006
Сообщений: 15
Провел на форуме:
171519

Репутация: 21
По умолчанию Слишком быстрый Random (C#)

Всем привет.

Есть вот такой код на C#:
Код:
             int i = 0;
            while(i<trackBar1.Value)
            {
            Random r = new Random();
            listBox1.Items.Add(r.Next());
                      i++;
            }
Если его выполнить то строчки которые добавляются в ListBox будут одинаковые.

Однако, если его выполнять пошагово (F11) то все нормально и значения которые добавляются в listbox разные.

Далее если модифицировать код:
Код:
            int i = 0;
            while(i<trackBar1.Value)
            {
                   Thread.Sleep(100);
                   Random r = new Random();
                   listBox1.Items.Add(r.Next());
                   i++;
            }
Тоже становить нормально.

Может я где то ошибаюсь ? Или так и надо тормозить процесс ?
 
Ответить с цитированием

  #2  
Старый 07.04.2010, 15:40
noxjoker
Познающий
Регистрация: 07.08.2009
Сообщений: 85
Провел на форуме:
705829

Репутация: 53
Отправить сообщение для noxjoker с помощью ICQ
По умолчанию

Код:
int i = 0;
            Random r = new Random();
            while (i < 10)
            {
                Console.WriteLine(r.Next());
                i++;
            }
 
Ответить с цитированием

  #3  
Старый 07.04.2010, 15:45
skivan
Новичок
Регистрация: 07.09.2006
Сообщений: 15
Провел на форуме:
171519

Репутация: 21
По умолчанию

Спасибо. А почему так происходит ?
 
Ответить с цитированием

  #4  
Старый 07.04.2010, 15:49
noxjoker
Познающий
Регистрация: 07.08.2009
Сообщений: 85
Провел на форуме:
705829

Репутация: 53
Отправить сообщение для noxjoker с помощью ICQ
По умолчанию

Код не логичный.
Ты в цикле делаешь екземпляр класса. Это не правильно.
 
Ответить с цитированием

  #5  
Старый 07.04.2010, 16:55
skivan
Новичок
Регистрация: 07.09.2006
Сообщений: 15
Провел на форуме:
171519

Репутация: 21
По умолчанию

И блин, ведь не ругается, работает
 
Ответить с цитированием

  #6  
Старый 07.04.2010, 17:00
noxjoker
Познающий
Регистрация: 07.08.2009
Сообщений: 85
Провел на форуме:
705829

Репутация: 53
Отправить сообщение для noxjoker с помощью ICQ
По умолчанию

Почитай что такое классы.

Не по теме:

Код:
int i = 0;
            while (i < 10)
            {
                int c=i;
                i++;
            }
Вот видишь код не логичный я int c делаю в цикле. А нужно было его вынести за цикл. Это с опытом придет.
 
Ответить с цитированием

  #7  
Старый 08.04.2010, 02:02
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме:
1354067

Репутация: 599


По умолчанию

выносить переменных за пределы цикла далеко не всегда логично.
опу следует прочитать про ГПСЧ и способы его реализации, чтобы понять глубинные причины сего бага. Тут все утыкается в данные, которыми инициализируется рандом. Главная задача генератора - получить уникальное начальное значение, из которого потом генерятся остальные, юзая функцию с равномерным распределением получаемых величин.
Ну или на худой конец стоит доки почитать об этом классе. Там все расписано, как юзать, когда создавать, какой основной способ получения данных(именно Next, а не порождение новых объектов).
 
Ответить с цитированием

  #8  
Старый 08.04.2010, 11:33
scrat
Постоянный
Регистрация: 08.04.2007
Сообщений: 853
Провел на форуме:
5812656

Репутация: 1540


Отправить сообщение для scrat с помощью ICQ
По умолчанию

Цитата:
Сообщение от skivan  
И блин, ведь не ругается, работает
с чего ему ругаться? Тут надо просто подумать о том, сколько раз у тебя выполнится инициализация Random'а, и нужно ли оно тебе.
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вконтакте Быстрый старт StalkerKill Покупка, продажа, услуги в Соц. Сетях 7 03.12.2009 10:07
Как обойти ограничение слишком частых комментариев на блогах Wordpress Gop Сценарии/CMF/СMS 1 21.04.2009 21:40



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ