Zufallszahl mit Wahrscheinlichkeit

ElTheodore

Neues Mitglied
Hallo,
ich möchte gerne, dass eine zufällige Zahl von 2 bis 11 generiert wird:

int zufallsZahl = zufall.nextInt(10) + 2;

das klappt so auch, allerdings hätte ich jetzt gerne noch die vierfache Wahrscheinlichkeit darauf, dass es eine 10 ist.
Hat jemand eine Idee wie das gehen könnte?
 
Für sowas kannste zum Beispiel so eine Klasse benutzen:
WeightedCollection


Bespiel:
Java:
import java.util.*;

public class Test {

    public static void main(String[] args) {

        WeightedCollection<Integer> w = new WeightedCollection<>();
        w.add(1, 2)
                .add(1, 3)
                .add(1, 4)
                .add(1, 5)
                .add(1, 6)
                .add(1, 7)
                .add(1, 8)
                .add(1, 9)
                .add(4, 10)
                .add(1, 11);


        int[] numbers = new int[10];
        for (int i = 0; i < 10000; i++) {
            numbers[w.next() - 2]++;
        }

        for (int i = 0; i < numbers.length; i++) {
            System.out.println(String.format("Zahl: %-10d Anzahl: %d", i + 2, numbers[i]));
        }
    }


}

class WeightedCollection<E> {

    private NavigableMap<Integer, E> map = new TreeMap<Integer, E>();
    private Random random;
    private int total = 0;

    public WeightedCollection() {
        this(new Random());
    }

    public WeightedCollection(Random random) {
        this.random = random;
    }

    public WeightedCollection<E> add(int weight, E object) {
        if (weight <= 0) return this;
        total += weight;
        map.put(total, object);
        return this;
    }

    public E next() {
        int value = random.nextInt(total) + 1;
        return map.ceilingEntry(value).getValue();
    }

}
 
Oder ganz poplig:
Java:
int[] zahlen = {2,3,4,5,6,7,8,9,10,10,10,10,11};
System.out.println(zahlen[(int)(Math.random()*zahlen.length)]);
 
mihe , es sollte so auch, bedarf aber noch der Verbesserung:
Java:
int multiplier = 4;
int q = 2;
int[] s = new int[13];
for (int i = 0; i < 13;  ) {
    if (q == 10) {
        while (multiplier-- > 0) {
            s[i++] = 10;
        }
        i--;
    } else {
        s[i] = q;
    }
    q++;
    i++;
}
System.out.println(s[(int) (Math.random() * s.length)]);
 
Dann aber so:
Java:
int random(int min, int max, int which, int multiplier) {
    int v = (int)(Math.random() * (max - min + multiplier)) + min;
    return v < which ? v : v < which+multiplier ? which : v - multiplier + 1;
}

System.out.println(random(2,11,10,4));
 

Zurück
Oben