Witam sz. Forumowiczów.
Zabrałem się wczoraj za pisanie własnej funkcji wrappującej funkcje losującą z .NET. Mój problem polega na tym, że funkcja dziwnie się zachowuję, tzn sama siebie powtarza, na dowód dołączę output z NUnit.
public int Randomize(int minVal, int maxVal) // zakres np. od 0 do 7
{
Console.WriteLine("Przed: "+m_randomedNumbers.Count); // dla wyjscia
int randomedNumber = -1;
if (Equals(m_randomedNumbers.Count, maxVal + 1)) // gdy 8 elementów [patrz przykładowy zakres]
m_randomedNumbers = new List<int>(); //nową listę generować czy lepiej .Clear();(??)
bool hasRandomed = true;
while(hasRandomed)
{
randomedNumber = m_random.Next(minVal, maxVal);
if (Equals(m_randomedNumbers.Count, 0)) // jeśli lista ma 0 elementów, to nie sprawdzamy jej
{
hasRandomed = false;
continue;
}
if (!m_randomedNumbers.Contains(randomedNumber))
{
hasRandomed = false;
}
}
m_randomedNumbers.Add(randomedNumber);
Console.WriteLine("randomedNumber: " + randomedNumber); // tu też output
return randomedNumber;
}
Chyba, że nie potrzebnie tworze listę przechowującą już wylosowane liczby i sprawdzam ją :F. Czy obiekt Random() ma własny stos? -- przynajmniej, ja takiej informacji nie mogę znaleźć.
A to mi wypluwa output w NUNIT:
Przed: 0
randomedNumber: 3
Przed: 2
randomedNumber: 6
Przed: 4
randomedNumber: 2
Przed: 6
randomedNumber: 1
Przed: 8
randomedNumber: 9
Przed: 10
randomedNumber: 5
Przed: 0
randomedNumber: 4
Przed: 2
randomedNumber: 5
Przed: 4
randomedNumber: 8
Przed: 6
randomedNumber: 2
Przed: 8
randomedNumber: 3
Przed: 10
randomedNumber: 6
Przed: 0
randomedNumber: 2
*Expected: 1
*Actual: 1
To coś, test zdaje, ale nie wiem czemu się tyle razy powtarza, gdy używam pętli. Boje się dużego narzutu na procesor, przy większym zakresie. "przed" i "randomedNumber" powinny się tylko raz pokazać, bez względu na ilość przebiegów pętli wewnątrz funkcji.