Avere una sequenza "casuale" ripetibile è utile negli scenari di test.
Ad esempio, è possibile utilizzarlo per testare un motore di gioco per assicurarsi che un'IA abbia scelto correttamente bersagli o percorsi, anche se ha una valutazione casuale del percorso.
Ecco un esempio molto semplicistico. Indipendentemente dal numero di volte in cui esegui questo test, scegli sempre le stesse tre carte quando viene assegnato lo stesso generatore di numeri casuali di base. Ciò può essere utile per garantire che il generatore di numeri casuali utilizzato sia quello fornito. E, per qualche ragione, se un nuovo generatore di numeri casuali venisse introdotto senza alterare il test, il test fallirebbe.
[TestMethod]
public void TestRandomPicking()
{
Random random = new Random(1);
Deck deck = new Deck(random);
Assert.AreEqual(3, deck.PickCard().Value);
Assert.AreEqual(1, deck.PickCard().Value);
Assert.AreEqual(5, deck.PickCard().Value);
}
public class Deck
{
public Deck()
{
_randomizer = new Random();
}
public Deck(Random randomizer)
{
_randomizer = randomizer;
}
Random _randomizer;
private List<Card> _cards = new List<Card>
{
new Card {Value = 1},
new Card {Value = 2},
new Card {Value = 3},
new Card {Value = 4},
new Card {Value = 5},
new Card {Value = 6},
new Card {Value = 7},
new Card {Value = 8},
new Card {Value = 9},
new Card {Value = 10}
};
private List<Card> Cards { get { return _cards; } }
public Card PickCard()
{
return Cards[_randomizer.Next(0, Cards.Count - 1)];
}
}
public class Card
{
public int Value { get; set; }
}
fonte
2011-02-08 14:09:07
E in alcune app ripetibili non è necessario. Posso pensare a situazioni in cui vorresti seminare manualmente, ma non ho mai avuto la necessità di impostarne esplicitamente uno. – Davy8
@ Davy8 - è vero - in quasi tutte le mie app non ho bisogno nemmeno di un seed, ma 'Random' copre ancora questa funzionalità. – BrokenGlass
Ho un programma di Corse da Corsa, che si muovono in modo casuale e si vincono. È la soluzione per fare lo stesso seme ?? –