Странная ситуация
От: DevelS  
Дата: 24.02.04 12:05
Оценка:
Здравствуйте,

возникла странная для меня ситуция:
есть функция
public string RandomPswd(int len)
{
Random random = new Random();
//string strTable = "ABCDEFGHIJKLMabcdefghijklm0123456789NOPQRSTUVWXYZnopqrstuvwxyz";
string strTable = "0123456789";
string res = "";
int maxRandomLen = strTable.Length — 1;
int x;

for (int i = 1; i <= len; i++)
{
x = random.Next(0, maxRandomLen);
res = res + strTable[x].ToString();
}
return res;

}

если вызвать функцию в цикле:

string[] tempArray = new string[150];
for (int i = 0; i<150; i++)
{
tempArray[i] = i.ToString() +": " + RandomPswd(8);
}

то строки в tempArray повторяются.

не могу понять почему ведь каждый раз создается другой екземпляр Random?
Re: Странная ситуация
От: Poudy Россия  
Дата: 24.02.04 12:12
Оценка:
[msdn]
public Random();


Initializes a new instance of the Random class, using a time-dependent default seed value.
Supported by the .NET Compact Framework.[/msdn]

Я так думаю, что time-dependent основано на часах низкого разрешения или просто генерация выполняется слишком быстро, так что у нескольких последовательных Random один и тот же seed.
Re: Странная ситуация
От: Ransom Stark Россия  
Дата: 24.02.04 12:14
Оценка:
DS>не могу понять почему ведь каждый раз создается другой екземпляр Random?
Рандом без параметров использует текущее время для установки. Может, оно не успевает сменится?
Re: Странная ситуация
От: Patrol  
Дата: 24.02.04 12:41
Оценка:
Здравствуйте, DevelS.

Уберите строку

Random random = new Random();


из функции. Инициализируйте переменную random при создании класса. А дальше — только next, next, next...
Оно и быстрее будет (в плане содания экземпляров класса Random), и качественнее
Re[2]: Странная ситуация
От: DevelS  
Дата: 24.02.04 12:46
Оценка:
Здравствуйте, Patrol, Вы писали:

P>Здравствуйте, DevelS.


P>Уберите строку


P>
P>Random random = new Random();
P>


P>из функции. Инициализируйте переменную random при создании класса. А дальше — только next, next, next...

P>Оно и быстрее будет (в плане содания экземпляров класса Random), и качественнее

Понял!
Спасибо всем!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.