Java:在x%的情况下做一些事情

时间:2011-04-01 17:44:58

标签: java

我需要几行Java代码,这些代码在x%的时间内随机运行命令。

伪码:

boolean x = true 10% of cases.

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

8 个答案:

答案 0 :(得分:27)

你只需要这样的东西:

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

答案 1 :(得分:19)

如果通过时间表示代码正在执行,那么您需要在代码块内部执行10%的次数整个块被执行你可以做类似的事情:

Random r = new Random();

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

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

当然0.10f代表10%,但你可以调整它。像每个PRNG算法一样,这通过平均使用来工作。除非yourFunction()被称为合理的次数,否则你不会接近10%。

答案 2 :(得分:3)

要将您的代码作为基础,您可以这样做:

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

仅供参考Math.random()使用Random

的静态实例

答案 3 :(得分:2)

您可以使用Random。您可能想要播种它,但默认值通常就足够了。

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

答案 4 :(得分:1)

你可以试试这个:


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");
        }
    }
}

答案 5 :(得分:0)

你必须首先定义“时间”,因为10%是一个相对量度......

E.g。 x每5秒为真。

或者您可以使用随机数生成器,从1到10均匀采样,如果他采样“1”,则总是做一些事情。

答案 6 :(得分:0)

您总是可以生成一个随机数(默认情况下,我认为它介于0和1之间),并检查它是否为&lt; = .1,再次这不是均匀的随机数....

答案 7 :(得分:0)

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