Witam, mam taki ciekawy (?) program, ktory bawi sie randomami:
class Program
{
public static int Rnd1(int x)
{
Random r = new Random();
return r.Next(x);
}
public static int Rnd2(int x)
{
int seed = DateTime.Now.Hour +
DateTime.Now.Minute +
DateTime.Now.Second +
DateTime.Now.Millisecond;
//Console.WriteLine(seed.ToString());
Random r = new Random(seed);
return r.Next(x);
}
static void Main(string[] args)
{
int[] tab = new int[10];
Random r = new Random();
for (int i = 0; i < tab.Length; ++i)
tab[i] = r.Next(10);
for (int i = 0; i < tab.Length; ++i)
Console.WriteLine(tab[i].ToString());
Console.WriteLine();
for (int i = 0; i < tab.Length; ++i)
tab[i] = Rnd1(10);
for (int i = 0; i < tab.Length; ++i)
Console.WriteLine(tab[i].ToString());
Console.WriteLine();
for (int i = 0; i < tab.Length; ++i)
tab[i] = Rnd2(10);
for (int i = 0; i < tab.Length; ++i)
Console.WriteLine(tab[i].ToString());
Console.ReadLine();
}
}
Jeszcze ciekawszy jest wynik, mianowicie w pierwszym przypadku wylosuje poprawnie (nie dziwie sie), natomiast w przypadkach 2 i 3 otrzymam 10 takich samych liczb w tablicy. Prawdopodobnie dziala tak szybko ze uzywa tego samego seeda do tworzenia obiektu random, potwierdza to odkomentowanie linii w funkcji Rnd2(). No i teraz pytanie, czy istnieje jakakolwiek mozliwosc aby to dzialalo poprawnie?
Myslalem o jakims System.Wait(1 milisekunda) ale nie wydaje mi sie to zbyt eleganckie.