c# - Wahrscheinlichkeit und random zahlen
Ich habe gesehen, diese Frage stellten sich in eine Reihe von Möglichkeiten, aber ich brauche nur einen sanity-check von dem, was ich hier mache.
Grundsätzlich möchte ich ein Ereignis auslösen, mit einer Wahrscheinlichkeit von 25% auf eine zufällig generierte Zahl zwischen 1 und 100 mit:
int rand = random.Next(1,100);
Werden die folgenden erreichen?
if (rand<=25)
{
//Some event...
}
Ich dachte, ich würde verwenden Sie eine Zahl zwischen 1 und 100, so dass ich optimieren können, sind die Wahrscheinlichkeiten, die später - z.B. passen zu 23% durch die Verwendung
if (rand<=23) {...}
Dank für das ansehen.
- Haben Sie es ausprobiert? Es sollte gut funktionieren. Nur vorsichtig sein, Sie müssen nicht neu erstellen, viele
Random
Instanzen in einem kurzen Zeitfenster, oder Sie wird wieder die gleiche "zufällige" Ergebnis. - Ich will nicht zu verwenden, 1, um 4 als ich das Spiel später, wenn es sein muss, aber ja, 1,4 wäre das gleiche. Dank Scott, ich verpasst, dass.
- Das klingt ungefähr richtig.
- Ja, ich habe diesen Fehler gemacht, eine Woche oder so vor - ich erstelle das random-Objekt als Instanz-variable, dies zu umgehen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das zweite argument von
Next(int, int)
ist die exklusive Obergrenze von der gewünschten Reichweite der Ergebnisse. Sie sollten daher diese:oder, wenn Sie verwenden müssen 1-basierte Logik,
if (rand >= 25 && rand < 50)
für null-basierte zahlen, weil Sie die Untergrenze inklusive und der Obergrenze inklusive. Für die 1-basierte Zahl, Ihren Ausdruck wäre richtig.Den größten Fehler, den Sie machen, ist es werden sollte
random.Next(0,100)
als Dokumentation StaatenEmphisis mine, exklusiv bedeutet, es zählen nicht die Zahl, die Sie übergeben, so dass mein code generiert, der Bereich 0-99 und der code wird generiert, der Bereich 1-99.
So ändern Sie Ihren code so,
Den Wechsel von
<=
zu<
ist, weil Sie jetzt mit der exklusiven upper bounds BereichKönnen Sie auch mit diesem code (in der Regel für die prozentualen Berechnungen double zwischen 0 und 1 verwendet):
if (rand < .25)
; die Obere Grenze ist exklusiv: msdn.microsoft.com/en-us/library/system.random.nextdouble.aspx0.0 <= random < 1.0
daher< 0.25
ist richtig!!!! Sie haben die vier Quartale[0.0 <= x < 0.25]
,[0.25 <= x < 0.5]
,[0.5 <= x < 0.75]
und[0.75 <= x < 1.0]
, die alle genau die gleiche Größe.if (rand <= .25)
aber er verändert es in der 5-Minuten-edit-Fenster.