2016-05-04 8 views
2

Say I 3 Fälle, die ich möchte, dass sie ausgeführt werden, aber nicht immer.Wie programmiere ich Anforderungen, die mit unterschiedlicher Häufigkeit ausgeführt werden?

z.

Case 1 --> happens always 
Case 2 --> happens 20% of times 
Case 3 --> happens 60% of times 

Wie kann ich das programmieren? Hier ist, was ich bisher dachte:

x = nextInt(100); 
execute case 1 
if(x <= 20){ 
execute case 2 
} 
if (x <= 60){ 
execute case 3 
} 

Gibt es einen anderen Ansatz für dieses Problem? Vielleicht eine Funktion, die ich nicht kenne? Die Java-Zufallsdokumentation scheint dafür nichts zu haben.

+0

Sieht mir gut, aber Sie sollten in Betracht ziehen, wenn case2 und case3 verknüpft sind, weil mit Ihrer Lösung, case3 wird immer dann auftreten, wenn case2 auftritt, weiß nicht, ob das beabsichtigt ist, andernfalls sollten Sie eine neue zufällige generieren für jeden Scheck separat –

Antwort

3

Sie können die Bibliothek Mathematik von Apache verwenden.

https://commons.apache.org/proper/commons-math/apidocs/org/apache/commons/math3/distribution/EnumeratedDistribution.html

<dependency> 
    <groupId>org.apache.commons</groupId> 
    <artifactId>commons-math3</artifactId> 
    <version>3.6.1</version> 
</dependency> 

Vielleicht ein wenig übertrieben

List<Pair<Boolean,Double>> list = new ArrayList<Pair<Boolean,Double>>(); 
list.add(new ImmutablePair(true, 0.2)); 
list.add(new ImmutablePair(false, 0.8)); 

EnumeratedDistribution e = new EnumeratedDistribution(list); 

//execute case 1 

if (e.sample()) { 
    //execute case 2 
} 
... 

Aber wenn Sie Ihre Logik ändern Sie können etwas wie dieses:

List<Pair<String,Double>> list = new ArrayList<Pair<String,Double>>(); 
list.add(new ImmutablePair("name_1", 0.2)); 
list.add(new ImmutablePair("name_2", 0.4)); 
list.add(new ImmutablePair("name_3", 0.4)); 
EnumeratedDistribution e = new EnumeratedDistribution(list);  

switch(e.sample()) { 
    case "name_1" : 
    ... 
    break; 
    case "name_2" : 
    ... 
    break; 
    case "name_3" : 
    ... 
    break; 
} 

Wo nur in einem Fall ausgeführt wird und jeder Fall hat eine andere Wahrscheinlichkeit, ausgeführt zu werden. Es ist sehr flexibel.

Verwandte Themen