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

Вы можете использовать RuleBasedNumberFormat. например, результат даст вам Ninety

ULocale locale = new ULocale(Locale.US);  //us english
Double d = Double.parseDouble(90);
NumberFormat formatter = new RuleBasedNumberFormat(locale, RuleBasedNumberFormat.SPELLOUT);
String result = formatter.format(d);

Он поддерживает широкий диапазон языков.

-1
задан user1416776 1 March 2019 в 05:50
поделиться

2 ответа

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

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

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

0
ответ дан Mustahsan 1 March 2019 в 05:50
поделиться

Вы хотите, чтобы ваши 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, вы «ломаетесь» и возвращаете истину:

// 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 процентов от true с, чем больше вы называете свой метод. В начале у вас ничего не будет, если не считать 100%, но со временем точность возрастает.

0
ответ дан TreffnonX 1 March 2019 в 05:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: