2016-11-21 6 views
-1

Normalerweise, wenn ich eine Chance, etwas will passiere ich eine Zufallszahl verwenden, dann eine if-Anweisung für ein bestimmtes Ergebnis zu überprüfen, etwa so:Gibt es eine effizientere Möglichkeit, eine Wahrscheinlichkeit von x% zu erstellen, dass etwas passiert?

public static void main(String[] args){ 
    public boolean chance(){ 
     Random r = new Random(); 
     int chance = Random(100)+1; //For a 1/100 chance 
     if(chance == 1){ 
      return true; 
     }else{ 
      return false; 
     } 
    } 
} 

Gibt es effizientere Möglichkeiten, dies in Java zu tun, Wie eine Java-Bibliotheksmethode, oder bin ich dabei, es jedes Mal zu erstellen, wenn ich eine prozentuale Chance nutzen möchte.

+1

Was es ist ineffizient? – Thilo

+0

Funktioniert das tatsächlich? Wenn Sie den RNG nicht säen, bekommen Sie nicht jedes Mal dieselbe Serie? Indem man das Random innerhalb der Methode erstellt, macht es es tatsächlich nicht so zufällig? Edit: javadocs sagen das '()' CTOR verwendet eine Saat, die sich wahrscheinlich von anderen Instanzen unterscheidet. Immer noch. In Bezug auf die Effizienz ist das Erstellen einer neuen Zufallsinstanz für eine Zahl nicht erforderlich. Vielleicht benutzen Sie 'Math.random()' oder halten Sie die 'Random'-Instanz herum. – John3136

+0

Dies wird nicht kompiliert. – shmosel

Antwort

-1

wie etwa:

import java.util.Random; 
class Oink { 
    private Random rnd; 
    Boolean chance() { 
     return (rnd.nextDouble()<0.01); 
    } 
} 
3

Unter der Annahme, x stellt ein Prozent Chance:

public static boolean chance(int x) { 
    return ThreadLocalRandom.current().nextInt(100) < x; 
} 
Verwandte Themen