Рандом или не рандом.

zombie

Client
Регистрация
14.08.2012
Сообщения
480
Благодарностей
119
Баллы
43
Привет.
В шабе следующий алгоритм - проходимся по файлам и ложим строки файлов в список. Потом в экшенах Си есть моменты там где он должен брать случайную строку из этого списка.
В ПМ всё строго а в ЗП заметил что рандом генерит одно и тоже число. Один рандом на одно действие. Т.е. он возвращается в тот же экшен и даже если я ошибся с кодом в экшене, он же всё равно должен генерить новое число. Копался копался в шабе в поисках ошибки - ничего не нашёл.

Собственно вопрос. Может кто-то замечал чтот подобное? Или всё таки это у меня где-то баг.
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113
Я думаю вряд ли кто сможет помочь без кода :-)
 

zombie

Client
Регистрация
14.08.2012
Сообщения
480
Благодарностей
119
Баллы
43
Я думаю вряд ли кто сможет помочь без кода
Понимаю. Всю цепочку не могу скинуть никак - там около 10 Си экшенов + логика и бла-бла-бла...
А код экшена, если вкратце такой:

Код, не имеющий ничего общего со списками ...
...
var list1 = project.Lists["Список1"];
var list2 = project.Lists["Список2"];
var random = new Random();
var i = random.Next(0,list1.Count);
var text = list1;
list1.Remove(list1);
list2.Add(text);
...
Код, не имеющий ничего общего со списками ...

Этот экшен ходит по кругу. Т.е. по моему скромному мнению он никак не должен генерить одинаковое число. До того как я вставил удаление строки после взятие он мне брал одинаковую строку.
Проверял перепроверял. Не могу нкиак найти. Думаю что где-то у меня ошибка, но уже затёр всё до дыр.

+ Так как я не прогер, хотел бы спросить. В экшене есть ещё рандом.
Нужно ли каждый раз перед генерацией нового диапозона писать var random = new Random(); ?
т.е... как правильно?

Вариант1

var random = new Random();
var i = random.Next(диапозон1,диапозон2);
...код...
i = random.Next(диапозон3,диапозон4);

Вариант2

var random = new Random();
var i = random.Next(диапозон1,диапозон2);
...код...
var random2 = new Random();
var i2= random2.Next(диапозон1,диапозон2);

Или всё равно? Пробовал и так и так =)
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
Аа это довольно старая ботва с рандомом))) я сам все обматерил пока не наткнулся на ответ)))
попробуйте так)

Random rand = new Random(DateTime.Now.Milliseconds);

Если честно не помню точно в чем там подвох, но запомнил то, что для генерации случайных чисел при обращении в цикле нужно вносить свое зерно для генерации)
погуглите c# random seed.
 
  • Спасибо
Реакции: zombie

zombie

Client
Регистрация
14.08.2012
Сообщения
480
Благодарностей
119
Баллы
43
Random rand = new Random(DateTime.Now.Milliseconds);
Скажите, а что мне даст случайное значение миллисекунд? Или это просто ради объявления рандома?

Если честно не помню точно в чем там подвох, но запомнил то, что для генерации случайных чисел при обращении в цикле нужно вносить свое зерно для генерации)
Это значит в цикле нужно заново объявлять рандом? Просто с правилами доступа и объявленний переменных в циклах,функциях не знаком почти.

погуглите c# random seed.
Спасибо, зыркну на досуге:-)
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
А вы попробуйте так
Random rand = new Random(DateTime.Now.Milliseconds);
int i= rand.Next(1,100);
 

st.max

Client
Регистрация
26.12.2012
Сообщения
75
Благодарностей
2
Баллы
8
А с генерацией имен в цикле как сделать?
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
А чем вас встроенный генератор не устраивает?
Если уж очень хочется своего - то делаете два большущих списка (ручками) с именем и фамилией. Инициализируете оба и берете по случайной строке из каждого
 

st.max

Client
Регистрация
26.12.2012
Сообщения
75
Благодарностей
2
Баллы
8
Зачем вам код?
{-Random.Int-|-65-|-120-}
Отлично генерит все время разное число в пределах данного диапазона.
 

bigcajones

Client
Регистрация
09.02.2011
Сообщения
1 216
Благодарностей
683
Баллы
113
old school: Bo:
 

mig-z

Client
Регистрация
05.12.2014
Сообщения
305
Благодарностей
71
Баллы
28
Зачем вам код?
{-Random.Int-|-65-|-120-}
Отлично генерит все время разное число в пределах данного диапазона.
Скажите пожалуйста, а как сделать чтобы рандом работал от заданного числа и до конца списка. К примеру у меня 100 кнопок на странице а на другой 60 и мне надо на каждой странице нажать случайно на любую начиная с первой и заканчивая последней. Например было бы здорово если бы работало так {-Random.Int-|-0-|-end-} - но так не работает. :(
 
  • Спасибо
Реакции: Gang

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
Скажите пожалуйста, а как сделать чтобы рандом работал от заданного числа и до конца списка. К примеру у меня 100 кнопок на странице а на другой 60 и мне надо на каждой странице нажать случайно на любую начиная с первой и заканчивая последней. Например было бы здорово если бы работало так {-Random.Int-|-0-|-end-} - но так не работает. :(
В № совпадения пропишите random
 
  • Спасибо
Реакции: mig-z

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)