2 Stimmen

Warum kann minValue == maxValue in Random.Next sein?

http://msdn.microsoft.com/de-de/library/2dx6wyd4.aspx

Anscheinend ist maxValue ein exklusiver oberer Grenzwert. Daher gibt Random.Next(2,3) immer 2 zurück. Random.Next(2,2) gibt ebenfalls immer 2 zurück. Warum erlauben sie wohl, dass minimum gleich maximum ist? Das ist irreführend!

5voto

Jon Skeet Punkte 1325502

Sieht für mich nur nach einem kleinen Designfehler aus. Ich stimme zu, dass maxValue strikt größer als minValue sein sollte - und es sollte eine ArgumentOutOfRangeException auslösen, wenn sie gleich sind.

Es gibt ein paar Aspekte von Random, die ich nicht mag - zum einen wäre es wirklich schön, es auf eine ordnungsgemäß einsteckbare (auf dokumentierte Weise) Weise zu haben, sodass Sie eine Unterklasse mit einer kryptographisch sicheren Quelle haben könnten. Es ist jetzt möglich, aber im Grunde müssen Sie zu viel über die Implementierung wissen und welche Methoden welche anderen aufrufen :(

Die Fallstricke beim Erstellen einer neuen Random-Instanz jede Mal, wenn Sie eine Schleife durchlaufen, und die offensichtliche "Korrektur" (eine statische Variable), die nicht thread-sicher ist, sind weitere Ärgernisse.

Im Grunde bin ich nicht besonders überrascht, ein weiteres kleines Widerhaken zu sehen :(

4voto

Will Vousden Punkte 31058

Es ist nur eine Konvention, wenn auch etwas irreführend. Sie könnten in jedem Fall ein solches Szenario konstruieren (wo die Ausgabe jedes Mal gleich ist). Es ist nützlich, um ein zufälliges Element eines Arrays auszuwählen, zum Beispiel:

var random = new Random();
var element = someArray[random.Next(0, someArray.Length)]; // Natürlich muss hier nicht die untere Grenze angegeben werden.

Bearbeiten: Habe Ihre Frage missverstanden! Meine Vermutung ist, dass es entweder a) schlechtes Design oder b) eine Bequemlichkeit ist, wenn Ihre beiden Grenzen potenziell gleich sein werden. Ich würde zustimmen, dass es jedoch nicht intuitiv ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X