Konsistenzproblem beim Zufallsstringgenerator
Problemstellung:
Ein Zufallsstringgenerator wird angezeigt unerwartetes Verhalten, das bei mehreren Aufrufen identische vierstellige Zeichenfolgen erzeugt. Die gewünschte Funktionalität besteht darin, zwei unterschiedliche Zufallszeichenfolgen zu generieren.
Code-Snippet:
private string RandomString(int size) { StringBuilder builder = new StringBuilder(); Random random = new Random(); char ch; for (int i = 0; i < size; i++) { ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65))); builder.Append(ch); } return builder.ToString(); }
Auflösung:
Die Inkonsistenzen entstehen durch das Erstellen einer neuen Instanz der Random-Klasse innerhalb der RandomString-Methode. Dies führt dazu, dass für jeden Aufruf derselbe Startwert verwendet wird und identische Sequenzen generiert werden.
Lösung:
Um echte Zufälligkeit sicherzustellen, verschieben Sie die Instanziierung der Random-Klasse nach ein statisches Feld:
private static Random random = new Random((int)DateTime.Now.Ticks);
Dadurch wird sichergestellt, dass eine einzelne Instanz des Zufallszahlengenerators während der gesamten Lebensdauer des Programms verwendet wird. Der DateTime.Now.Ticks-Wert dient als eindeutiger Startwert und garantiert, dass jeder nachfolgende Aufruf von RandomString eine eindeutige Zufallszeichenfolge erzeugt.
Geänderter Code:
private static Random random = new Random((int)DateTime.Now.Ticks); private string RandomString(int size) { StringBuilder builder = new StringBuilder(); char ch; for (int i = 0; i < size; i++) { ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65))); builder.Append(ch); } return builder.ToString(); }
Durch die Implementierung dieser Änderung erzeugt der Generator nun zwei unterschiedliche Zufallsgeneratoren Zeichenfolgen:
// get 1st random string string Rand1 = RandomString(4); // get 2nd random string string Rand2 = RandomString(4); // creat full rand string string docNum = Rand1 + "-" + Rand2;
Ausgabe:
UNTE-FWNU
Das obige ist der detaillierte Inhalt vonWarum erzeugt mein Zufallsstringgenerator identische Strings und wie kann ich das Problem beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!