Java: etwas tun, x Prozent der Zeit
Brauche ich ein paar Zeilen Java-code, der einen Befehl ausführen, der x % der Zeit zufällig.
psuedocode:
boolean x = true 10% of cases.
if(x){
System.out.println("you got lucky");
}
InformationsquelleAutor John R | 2011-04-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn durch Zeit du meinst mal, dass der code ausgeführt wird, so dass Sie etwas wollen, in einem code-block, der ausgeführt wird, 10% der Zeit wird der gesamte block ausgeführt wird, können Sie nur so etwas wie:
Natürlich
0.10f
steht für 10%, aber Sie können es anpassen. Wie jeder PRNG-Algorithmus diese Werke von der durchschnittlichen Nutzung. Sie gewann T get in der Nähe von 10%, es sei dennyourFunction()
ist aufgerufen einen angemessenen Betrag von Zeit.nextFloat()
können in null-Ergebnis, der Vergleich sollte unbedingt kleiner als. In anderen Worten, verwenden Sie<
statt<=
. Natürlich, es wäre viel einfacher, auf Grund richtig über den code, wenn Sie verwendet werdennextInt(10)
statt einerfloat
.Das ist falsch. Es ist einfach eine falsche Annahme, die Schwimmer sind nicht die genauen zahlen, so dass unter einem strengen Vergleich in dieser situation nicht etwas ändern, auch, weil die zufällige Sequenz erzeugt wird von int-Werten. Ich fordere Sie auf, einen Codeausschnitt, der zeigt, dass die Verwendung von nur < operator ergibt sich eine mehr korrekt (in der Nähe von 10%) Ergebnis 🙂
Probieren Sie es aus sich selbst: pastie.org/1744784
Okay, ich gewähre, dass im konkreten Fall von 10%, das Verhältnis ist egal. Aber was ist mit 50%? Oder 75%? Mein Punkt war, dass für die Allgemeine Richtigkeit, sollten Sie
<
nicht<=
.es gibt keine nennenswerten Unterschied zwischen
<
und<=
für den Vergleich alle schweben hier. Nehmen wir mal 50% zum Beispiel. Sie sind sehr selten zu bekommen, genau0.5f
ausnextFloat()
da beschäftigen wir uns mit 32 zufällige bits für den Schwimmer. Zwar wäre es falsch zu verwendennextInt(10) <= 5
für 50% - wie Sie immer sind, der Schwimmer Fall ist viel mehr wienextInt(1000000000) <= 500000000
. Es wird nicht statistisch Auffällig, weil Sie nur selten treffen wird500000000
für die gleich in<=
egal.InformationsquelleAutor Jack
Brauchen Sie nur so etwas wie dieses:
Hier ist ein vollständiges Beispiel, dass die Maßnahmen es:
Wenn Sie wollen, so etwas wie 34%, die Sie nutzen könnten
rand.nextInt(100) < 34
.InformationsquelleAutor WhiteFang34
Nehmen Ihren code als Basis, können Sie einfach tun Sie es so:
FYI
Math.random()
verwendet eine statische Instanz vonRandom
InformationsquelleAutor Crystark
Können Sie Zufällig. Möchten Sie vielleicht, um Saatgut, aber der Standard ist oft ausreichend.
InformationsquelleAutor Scott Stanchfield
Könnten Sie versuchen, diese:
≤
auch Arbeit?!Nein, es war ein Fehler.
Dies ist problematisch, Sie sollten nie gegossen, das Ergebnis eines Aufrufs zu
.random()
zu einemint
, als Sie die Einführung von nicht-zufälligen Verzerrungen. Verwenden Sie stattdessen die entsprechenden Methoden derRandom
wie.nextInt()
die mit diesen Neigungen richtig.InformationsquelleAutor Alan Moreno de la Rosa
Haben Sie, um zu definieren, "Zeit", dem ersten seit über 10% ist ein relatives Maß...
E. g. x ist wahr, alle 5 Sekunden.
Oder Sie können verwenden einen Zufallszahlengenerator, die Proben gleichmäßig von 1 bis 10 und immer etwas tun, wenn er Proben eine "1".
InformationsquelleAutor ptikobj
Konnte man immer eine Zufallszahl erzeugen (standardmäßig zwischen 0 und 1, glaube ich) und prüfen, ob es <= .1, das ist wieder nicht einheitlich zufällig....
InformationsquelleAutor Jesus Ramos
InformationsquelleAutor reznic