Random boolean mit Gewicht oder bias
Muss ich erzeugen einige zufällige Boolesche Werte. Aber ich muss in der Lage sein anzugeben, die die Wahrscheinlichkeit der Rückkehr true
. Als Ergebnisse machen:
private Random random = new Random();
random.nextBoolean();
wird nicht funktionieren.
Eine mögliche Lösung wäre:
private Random random = new Random()
public boolean getRandomBoolean(float p){
return random.nextFloat() < p;
}
Ich Frage mich, ob es nicht eine bessere oder mehr natürlichen Weg, dies zu tun.
BEARBEITEN:
Ich glaube, ich bin zu Fragen, ob es eine Bibliothek-Klasse, bietet ein nextBoolean(float Wahrscheinlichkeit) - Methode.
- Welche Art "besser" sind Sie auf der Suche nach? Das sieht mir vernünftig...
- Dies sind zwei (wesentlich) verschiedene Probleme, so sollte gefragt werden, in zwei separaten posts...
- Ich denke, ich hatte gehofft, für etwas entlang der Linien von Random.nextBoolean(long-Wahrscheinlichkeit)
- Ich habe geschnippelt sich Ihre zweite Frage, bitte poste Sie separat, wenn Sie wollen, eine Antwort für Sie. Ich habe auch dafür gestimmt, schließen diese Frage, da es in Erster Linie Stellungnahme-basierend.
- Danke. Ich werde Bearbeiten Sie die Frage, so ist es weniger Meinung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Ansatz, die Sie verwenden ist schon in Ordnung.
* soweit ich weiß, gibt es nicht eine standard-Java-Methode, dass dieser code nicht kürzer.
* Für nicht-kryptografische Zwecke.
1) ja, ich denke, dein Ansatz ist gültig, und ich sehe nicht einen anderen einfacheren Weg.
2) Es gibt eine Bibliothek für die Bearbeitung von Zufallszahlen verschiedener statistischer Verteilungen:
http://introcs.cs.princeton.edu/java/22library/StdRandom.java.html
Hier ist, was ich verwende. Sehr ähnlich FracturedRetina Antwort.
boolean true20 = (random.nextInt(5) == 0)
?Den MockNeat Bibliothek implementiert diese Funktion.
Beispiel für die Erstellung einer booleschen Wert, der hat zu 99,99% treu:
Dieser eine basiert auf Prozentsatz...
Erweiterung auf user2495765 Antwort,
Sie können eine Funktion, die einem input-Verhältnis (als zwei Werte chance:Bereich siehe code)
}
Je nachdem, was Sie beabsichtigen zu tun, werden Sie wahrscheinlich nicht wollen, um initalize Zufällig aus Ihrer Methode, sondern verwenden Sie als Klassenvariable (wie im code oben) und Aufruf nextInt() innerhalb der Funktion.
Dein Weg ist wahrscheinlich besser, code-golf-wise, aber ein anderer Weg, es zu tun ist wie folgt:
Oder für 2 in 5, versuchen Sie dies:
Random-Objekt muss intialized schon.