Java: делать что-то х процентов времени

Мне нужно несколько строк кода Java, которые запускают команду х% времени в случайном порядке.

psuedocode:

boolean x = true 10% of cases.

if(x){
  System.out.println("you got lucky");
}

Ответ 1

Если по времени вы имеете в виду времена, когда код выполняется, так что вы хотите что-то внутри блока кода, которое выполняется в 10% случаев, когда весь блок выполняется, вы можете просто сделать что-то вроде:

Random r = new Random();

...
void yourFunction()
{
  float chance = r.nextFloat();

  if (chance <= 0.10f)
    doSomethingLucky();
}

Конечно, 0.10f означает 10%, но вы можете его отрегулировать. Как и каждый алгоритм PRNG, это работает при среднем использовании. Вы не достигнете 10%, если yourFunction() не будет называться разумным количеством раз.

Ответ 2

Вам просто нужно что-то вроде этого:

Random rand = new Random();

if (rand.nextInt(10) == 0) {
    System.out.println("you got lucky");
}

Вот полный пример, который его измеряет:

import java.util.Random;

public class Rand10 {
    public static void main(String[] args) {
        Random rand = new Random();
        int lucky = 0;
        for (int i = 0; i < 1000000; i++) {
            if (rand.nextInt(10) == 0) {
                lucky++;
            }
        }
        System.out.println(lucky); // you'll get a number close to 100000
    }
}

Если вы хотите что-то вроде 34%, вы можете использовать rand.nextInt(100) < 34.

Ответ 3

Чтобы взять ваш код в качестве базы, вы можете просто сделать это следующим образом:

if(Math.random() < 0.1){
  System.out.println("you got lucky");
}

FYI Math.random() использует статический экземпляр Random

Ответ 4

Вы можете использовать Random. Вы можете захотеть засеять его, но по умолчанию часто бывает достаточно.

Random random = new Random();
int nextInt = random.nextInt(10);
if (nextInt == 0) {
    // happens 10% of the time...
}

Ответ 5

Вы можете попробовать следующее:


public class MakeItXPercentOfTimes{

    public boolean returnBoolean(int x){
        if((int)(Math.random()*101) <= x){ 
            return true; //Returns true x percent of times.
        }
    }

    public static void main(String[]pps){
        boolean x = returnBoolean(10); //Ten percent of times returns true.
        if(x){
            System.out.println("You got lucky");
        }
    }
}

Ответ 6

Сначала вы должны определить "время", так как 10% является относительной мерой...

например. x истинно каждые 5 секунд.

Или вы можете использовать генератор случайных чисел, который сэмплирует равномерно от 1 до 10 и всегда что-то делать, если он выберет "1".

Ответ 7

Вы всегда можете сгенерировать случайное число (по умолчанию оно находится в пределах от 0 до 1, я считаю) и проверить, равно ли оно < =.1, это не является случайным случайным образом....

Ответ 8

public static boolean getRandPercent(int percent) {
    Random rand = new Random();
    return rand.nextInt(100) <= percent;
}