Этот метод будет принимать произвольное число чисел, которые будут использоваться в качестве взвешивания результата. В коде нет проверки, но для корректности их сумма должна быть 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)