HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

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

Репутация: 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
С нами: 8821178

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

Код:
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
С нами: 10355297

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

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

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

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

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

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

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

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

  #6  
Старый 08.04.2010, 11:33
scrat
Постоянный
Регистрация: 08.04.2007
Сообщений: 853
С нами: 10048706

Репутация: 1540


По умолчанию

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

  #7  
Старый 07.04.2010, 17:00
noxjoker
Познающий
Регистрация: 07.08.2009
Сообщений: 85
С нами: 8821178

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

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

Не по теме:

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

  #8  
Старый 08.04.2010, 02:02
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
С нами: 10386906

Репутация: 599


По умолчанию

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



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



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


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




ANTICHAT ™ © 2001- Antichat Kft.