Случайные числа только несколько раз

Как я могу получить случайное число x% времени

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

и y% случаев любое число больше 10.

Может быть тривиально, но я не могу найти простого решения Спасибо за вашу помощь ! :)

Что такое «случайное число» и «любое число больше 10»?

Henry 01.03.2019 06:54

макс меньше 10

user1416776 01.03.2019 07:40
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
76
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы хотите, чтобы ваш x применялся случайно или детерминировано?

Случайный вариант:

Если вы хотите, чтобы x также было случайным, вы можете просто сгенерировать случайное значение:

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

percent должно быть от 1 до 100, поэтому у вас ровно 100 возможных значений. Если вы включите 0, у вас будет 101. Затем вы выполняете процентную проверку. Если процент находится за пределами (больше) x, x было слишком мало. Поэтому вы получаете false, иначе true. Оттуда вы можете работать с if-условием.

Детерминированный вариант:

Если детерминировано, это зависит от вашего предпочтительного поведения. Например, вы можете использовать счетчик, и каждый раз, когда вы превышаете 100, вы «ломаетесь» и возвращаете true:

// 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.
}

При этом вы получите ровно x процентов trues, чем больше вы назовете свой метод. В начале у вас их не будет, разве что 100%, но со временем точность повышается.

Ответ принят как подходящий

Обычно вы используете генератор случайных чисел. Большинство из них возвращают число в интервале [0,1], поэтому вы должны проверить, является ли это число <= x (процент/шанс) или нет. Ниже приведен пример кода

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

здесь я выбираю вероятность x как 10%, т.е. 0,1. поэтому в 10% случаев вы получите случайное число. вы можете сделать наоборот для y, а также в соответствии с вашими требованиями

Другие вопросы по теме