Jak mogę uzyskać losową liczbę x% czasu

int randomNum = ThreadLocalRandom.current().nextInt(min, max + 1);

I y% czasów dowolnej liczby powyżej 10.

Może trywialny, ale nie mogę znaleźć prostego rozwiązania dzięki za pomoc! :)

-1
user1416776 1 marzec 2019, 08:50

2 odpowiedzi

Najlepsza odpowiedź

Ogólnie używasz generatora liczb losowych. Większość z nich zwraca liczbę w przedziale [0,1], więc sprawdzić, czy ten numer jest <= x (procent / szansa), czy nie. Poniżej znajduje się kod próbny

double x=0.1;
if( Math.random() <= x ) {
   int randomNum = ThreadLocalRandom.current().nextInt(min, max + 1);
}

Tutaj wybieram szansę na X do 10%, 1,1. Tak więc za 10% przypadków otrzymasz losową liczbę. Możesz wykonywać odwrotnie dla Y, a także na Twoje wymagania

2
Mustahsan 1 marzec 2019, 07:45

Czy chcesz, aby twój x stosował losowo lub deterministyczny?

Losowy wariant:

Jeśli chcesz x, aby być również przypadkowym, możesz wygenerować wartość losową:

int percent = ThreadLocalRandom.current().nextInt(1, 100);
if (percent < x) {
    // ...get the actual random value.
}

percent powinien wynosić od 1 do 100, więc masz dokładnie 100 możliwych wartości. Jeśli umieścisz 0, masz 101. Następnie wykonasz procentową kontrolę. Jeśli procent jest na zewnątrz (większy niż) x, x był zbyt mały. Dlatego otrzymujesz false, w przeciwnym razie true. Stamtąd możesz pracować z warunkami if.

deterministyczny wariant:

Jeśli jesteś deterministyczny, zależy to od preferowanego zachowania. Na przykład możesz użyć licznika i za każdym razem, gdy przekazujesz powyżej 100, "przerwa" i zwróć prawdę:

// object attribute.
private Integer accumulator = 0;

// in method (should be synchronized, at least on accumulator, if you use multithreading):
accumulator += x;
boolean overflow = false;
if (accumulator >= 100) {
    overflow = true;
    accumulator %= 100; // this applies modulo 100 to accumulator.
}

if (overflow) {
    // ...get the actual random value.
}

Dzięki temu otrzymasz dokładnie x procent true s, tym więcej nazywasz metodą. Na początku nie będziesz miał żadnych, chyba że 100%, ale w czasie, dokładność wznosi się.

1
TreffnonX 1 marzec 2019, 06:09