# Werte mit gegebener Wahrscheinlichkeit selektieren



## bingoTop (9. Jul 2012)

Hallo,

ich benötige mal wieder Hilfe, stehe seid Stunden auf dem Schlauch.

Ich habe eine Liste gegeben mit Strings und dazugehörigen Wahrscheinlichkeiten:

URL1, 50%
URL2, 30%
URL3, 20%


Ich möchte nun eine Methode getEntry() implementieren, die mir bei 100 Aufrufen, den ersten Eintrag mit einer Wahrscheinlichkeit von 50 den 2. Eintrag mit 30 und den 3. Eintrag mit einer Wahrscheinlichkeit von 20 zurückgibt.

Weiß jetzt nicht wie ich von einem Math.Random-Wert auf einen entsprechenden Listeintrag komme, bei dem die gegebene Wahrscheinlichkeit beachtet wird.
Habe überlegt die Liste zu erweitern und den 1. Wert z.B. 50x abzulegen, dass find ich aber sehr unsauber.

Über kreative Ideen würde ich mich sehr freuen!


----------



## Marco13 (9. Jul 2012)

Man könnte sowas machen wie

```
Random random = new Random(0);
double d = random.nextDouble();
if (d <= 0.5        ) return URL1;
if (d <= 0.5+0.3    ) return URL2;
if (d <= 0.5+0.3+0.2) return URL3;
```

Aber das ist natürlich unpraktikabel und murksig wenn es um mehrere Einträge geht. Deswegen ein spontaner Gedanke: Eine TreeMap, die
0.5 -> URL1
0.5+0.3 -> URL2
0.5+0.3+0.2 -> URL3
abbildet, und von der man sich dann mit map.ceilingEntry(d) den Wert für das Intervall abholt, wo 'd' drin gelandet ist.


----------



## ThreadPool (10. Jul 2012)

Hatten wir schon mal...

http://www.java-forum.org/java-basics-anfaenger-themen/130972-bestimmung-zufalls-ereignis.html


----------



## Marco13 (10. Jul 2012)

Peinlich ... da implementiert man sowas mal aus und erinnert sich im entscheidenden Moment nicht mehr dran... (wollte schon ewig mal eine "Snippet-Sammlung" erstellen, durchsuchbar mit Stichworten und allem... :reflect: )


----------



## ThreadPool (10. Jul 2012)

Macht nix, für die Unterstützung sorgt ja die Kraft der "Community Cloud"


----------

