random.Next(0,5)
Es wird nie die 5 zurückgegeben (aber manchmal die 0). Warum? Ich dachte, dies sind nur Grenzwerte, die zurückgegeben werden können. Vielen Dank
random.Next(0,5)
Es wird nie die 5 zurückgegeben (aber manchmal die 0). Warum? Ich dachte, dies sind nur Grenzwerte, die zurückgegeben werden können. Vielen Dank
Antworten:
Der maxValue
für die oberen gebundenen im Next()
Verfahren ist exklusiver -Der Bereich umfasst minValue
, maxValue-1
und alle Zahlen dazwischen.
array[random.Next(0, array.Length)]
Die Dokumentation besagt, dass die Obergrenze exklusiv ist. Exklusiv bedeutet, dass es nicht im möglichen Rückgabesatz enthalten ist. In einer mathematischeren Notation 0 <= x < 5
in diesem Fall.
minValue
statt zurückgegeben maxValue
?
minValue
= maxValue
. Hier spielt es keine Rolle, ob minValue
oder maxValue
zurückgegeben wird, weil sie gleich sind. minValue <= x < maxValue
ist nicht wahr. Wenn minValue
= maxValue
= 0, wird x = 0 zurückgegeben und 0 <0 ist nicht wahr.
Direkt aus der Dokumentation:
Summary:
Returns a random number within a specified range.
Parameters:
minValue:
The inclusive lower bound of the random number returned.
maxValue:
The exclusive upper bound of the random number returned. maxValue must be
greater than or equal to minValue.
Returns:
A 32-bit signed integer greater than or equal to minValue and less than maxValue;
that is, the range of return values includes minValue but not maxValue. If
minValue equals maxValue, minValue is returned.
Wenn Sie sich die Parameter ansehen, werden Sie sehen, dass dies minValue
inklusive ist (weshalb Ihre 0 auftritt) und maxValue
exklusiv ist (Ihre 5 tritt nie auf).
Eine gute Möglichkeit, sich daran zu erinnern, besteht darin, max als Anzahl von Zahlen zu betrachten, aus denen Zufallszahlen entnommen werden. Das random.Next(0,2)
bedeutet, dass 2 Zahlen ab 0: 0 und 1 zufällig ausgewählt werden.
Dies wurde vor langer Zeit geschrieben, aber ich werde es trotzdem kommentieren. Ich denke, der Hauptgrund für diese Entwurfsentscheidung ist, dass die meisten, wenn nicht alle Zufallszahlengeneratoren in ihrem Kern Zahlen von 0 bis 2 ^ 32-1 erzeugen. Wenn Sie also Int32.MaxValue angeben, erhalten Sie diese Nummer nie. Eine Ausnahme für eine Nummer zu haben, muss für die Designer nicht akzeptabel gewesen sein, daher haben sie beschlossen, die Klammer exklusiv zu verwenden. Problem gelöst!
Wenn Sie in Google nach "c # random" suchen und den ersten Links zu der Methode des Begehrens folgen, erhalten Sie hier: http://msdn.microsoft.com/en-us/library/aa329893(v=vs.71). aspx
Und es gibt keinen Hinweis auf die Exklusivität der Obergrenze. Sie müssen den Fehler im Code gefunden und mit Dokumentation korrigiert haben.
Daher ist es wichtig, immer die Version des Frameworks zu überprüfen, wenn Sie sich die Dokumentation ansehen. Auch bei der Arbeit mit alten Versionen des Frameworks lohnt es sich, einen Blick auf die neuere Dokumentation zu werfen.