Генерация числа от 1 до 2 java Math.random () с вероятностью, установленной для каждого числа - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь сгенерировать random numbers между 1 и 2, используя импортированный класс math.random(), и установить probability для каждого числа.

Приведенный ниже код устанавливает probability равным 1/2 для двух чисел каждый 1/2

int randomInt = (Math.random() <= 0.5) ? 1 : 2;

Я хочу иметь возможность установить probability для каждого индивидуума числа, например число 1 (вероятность 20%) и число 2 (вероятность 80%) или соотношение 20:80. любое решение?

Редактировать: Программа, которую мне нужно сделать, может установить probability для номера 1 и номера 2 отдельно. как просить user ввести probability для цифр 1 и 2

Ответы [ 4 ]

0 голосов
/ 10 апреля 2020

Все, что вам нужно сделать, это сделать возможным параметризацию «0.5» в вашем коде. Например, используйте для него переменную:

static int randomOneOrTwo(double probabilityOfOne) {
    return (Math.random() < probabilityOfOne) ? 1 : 2;
}

Теперь randomOneOrTwo(0.20) вернет 1 с вероятностью 20%, 2 с вероятностью 80%.

0 голосов
/ 10 апреля 2020

Этот метод будет принимать произвольное число чисел, которые будут использоваться в качестве взвешивания результата. В коде нет проверки, но для корректности их сумма должна быть 100.

public static int randomInt(int... ratios) {
    int randomInt = ThreadLocalRandom.current().nextInt(1, 101);
    int previous = 0;
    for (int i = 0; i < ratios.length; i++) {
        if (randomInt < (ratios[i] + previous)) {
            return i + 1;
        }
        previous += ratios[i];
    }
    return 0;
}

Например, следующий вызов даст вероятность 1 10%, 2 40%, 3 20% и 4 30% .

randomInt(10, 40, 20, 30)
0 голосов
/ 10 апреля 2020

Поскольку ваш набор выбора содержит только два элемента (1,2), вы можете вывести вероятность 1, когда пользователь вводит вероятность 2.

public class OneOrTwo {
  public double probability1 = 0.2;
  public int next() {
    return (Math.random() <= probability1 ? 1 : 2);
  }
  public void setProbabilityOne(double p1) {
    probability1 = p1;
  }
  public void setProbabilityTwo(double p2) {
    probability1 = 1.0 - p2;
  }
  ... driver method, get user input, all that stuff ...
}
0 голосов
/ 10 апреля 2020

Я думаю, вы можете сделать это разными способами.

Вариант 1: Самый простой

int randomInt = (Math.random() <= 0.2) ? 1 : 2;

Вариант 2: Немного интересный

// 20:80
final int seedList[] =  {
        1, //20%
        2,2,2,2//80%
};
for (int i =0; i < 10; i++) {
        int position = (int) (Math.random() * seedList.length);
        System.out.println(seedList[position]);
}

Любыми другими способами. Я думаю, что вы можете быть изобретательны в решении этой проблемы.

...