Java: do something x percent of the time

前端 未结 8 783
再見小時候
再見小時候 2020-12-09 17:04

I need a few lines of Java code that run a command x percent of the time at random.

psuedocode:

boolean x = true 10% of cases.

if(x){
  System.out.p         


        
相关标签:
8条回答
  • 2020-12-09 17:19
    public static boolean getRandPercent(int percent) {
        Random rand = new Random();
        return rand.nextInt(100) <= percent;
    }
    
    0 讨论(0)
  • 2020-12-09 17:21

    If by time you mean times that the code is being executed, so that you want something, inside a code block, that is executed 10% of the times the whole block is executed you can just do something like:

    Random r = new Random();
    
    ...
    void yourFunction()
    {
      float chance = r.nextFloat();
    
      if (chance <= 0.10f)
        doSomethingLucky();
    }
    

    Of course 0.10f stands for 10% but you can adjust it. Like every PRNG algorithm this works by average usage. You won't get near to 10% unless yourFunction() is called a reasonable amount of times.

    0 讨论(0)
  • 2020-12-09 17:24

    You can use Random. You may want to seed it, but the default is often sufficient.

    Random random = new Random();
    int nextInt = random.nextInt(10);
    if (nextInt == 0) {
        // happens 10% of the time...
    }
    
    0 讨论(0)
  • 2020-12-09 17:27

    You just need something like this:

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

    Here's a full example that measures it:

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

    If you want something like 34% you could use rand.nextInt(100) < 34.

    0 讨论(0)
  • 2020-12-09 17:27

    You have to define "time" first, since 10% is a relative measure...

    E.g. x is true every 5 seconds.

    Or you could use a random number generator that samples uniformly from 1 to 10 and always do something if he samples a "1".

    0 讨论(0)
  • 2020-12-09 17:39

    You could always generate a random number (by default it is between 0 and 1 I believe) and check if it is <= .1, again this is not uniformly random....

    0 讨论(0)
提交回复
热议问题