C# Random.Next(int, int) – obere und untere Grenze richtig setzen

Der Teufel ist ein Eichhorn, oder auch der Fehler liegt im Detail. Ich wollte gestern eine zufällige Zahlenreihe mit 0 und 1 erstellen. Das Visualstudio sagt mir hierzu nutze die Random.Next(int, int) Methode, wobei der erste Integer die untere Grenze und der zweite Integer die obere Grenze definiert. Nicht mehr und nicht weniger. Also müsste folgendes doch funktionieren:

Random rnd = new Random();
int zzahl = rnd.Next(0,1);

Falsch gedacht! So bekommt man nur eines – und zwar nur Nullen. Ein Blick in die MSDN Library sorgt für Aufklärung. Dort wird nämlich, im Gegenteil zum IntelliSense vom VisualStudio, erklärt, dass die untere Grenze inklusiv und die obere Grenze exklusiv ist.

Parameter

minValueTyp: System.Int32
Die inklusive untere Grenze der zurückgegebenen Zufallszahl.

 

maxValue

Typ: System.Int32Die exklusive obere Grenze der zurückgegebenen Zufallszahl. maxValue muss größer oder gleich minValue sein.

Im Klartext heißt das, dass der korrekte Aufruf um Nullen und Einsen zu generieren wie folgt aussehen müsste:

Random rnd = new Random();
int zzahl = rnd.Next(0,2);

Ich hoffe, ich konnte dem ein oder anderen helfen.
Viele Grüße,
Raffi

Raffi

Seit 2011 blogge ich hier über Programmierung, meine Software, schreibe Tutorials und versuche mein Wissen, so gut es geht, mit meinen Lesern zu teilen.

3 Kommentare

  1. Ich denke, dass hinter diesem Verhalten sogar ein logischer Gedanke steckt.

    Da in der Programmierung meist alles mit Null indiziert ist und somit der Index über Length – 1 angesprochen wird.
    So kann z.B. auf ein zufälliges Array Element ohne groß drüber nachzudenken zugegriffen werden:

    var val = arr[rnd.Next(0, arr.Length)]

    Grüße

    Kai

    • Hallo Kai,

      aus dieser Warte hatte ich das noch gar nicht betrachtet. Aber das ergibt definitiv Sinn. Wieder was gelernt! Danke dafür.

      Gruß,
      Raffael

  2. Andreassays:

    Auf Deutsch gesagt, man muss die 2. Zahl immer Minus 1 zählen.
    Irgendwie erinnert mich das an z.B. die for Schleife, wo man auch mit einem einfachen (kleiner/größer) nur die nächst kleinere Zahl erreicht. Dort gibt es aber die Möglichkeit auf = (kleiner / größer – gleich).

Hinterlasse einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Sie dient nur dem Spamschutz.