x =(int)(Math.random()* 1)0或1的几率是多少?

时间:2012-12-05 04:05:56

标签: java math random

这是确切的代码然后我有一个案例0的开关:和案例1:似乎案例1:每次出来,我想有50/50的机会0或1出来这是正确的方法还是我应该使用1.5或者这究竟是如何工作的?

talka = (int)(Math.random() * 1);
        switch(talka)
        {

        case 0:
        {
            talk.setAnimationListener(this);
            talk.playtimes(1,24);
            startService(new Intent(this, love1.class));
            break;
        }
        case 1:
        {
            talk.setAnimationListener(this);
            talk.playtimes(1,12);
            startService(new Intent(this, love2.class));
            break;
        }
        }

5 个答案:

答案 0 :(得分:8)

只需使用java.util.Random对象,只需在其上调用nextBoolean()即可在50:50分布中返回true或false。轻松Math.PI

答案 1 :(得分:5)

这总是四舍五入。

talka = (int)(Math.random() * 1); // between 0 and 0

你的意图可能是

talka = (int)(Math.random() * 2); // between 0 and 1

但是,使用Math.random()得到一位效率非常低。

如果您使用随机

talka = random.nextInt(2);

甚至更好

talk.setAnimationListener(this);
if (random.nextBoolean()) {
        talk.playtimes(1,24);
        startService(new Intent(this, love1.class));
} else {
        talk.playtimes(1,12);
        startService(new Intent(this, love2.class));
}

答案 2 :(得分:3)

变量talka将始终为零; Math.random返回一个值,其中0 <= x&lt; 1;由于x必须小于1且(int) cast会截断小数组件,因此整数结果将始终为0.

来自Math.random文档:

  

返回带有正号的double值,大于或等于0.0且小于1.0。

改为使用java.util.Random.nextBoolean()

答案 3 :(得分:2)

问题与演员的工作方式有关。

在可能的测试中,Java基本上是“修剪”十进制结果并简单地采用“整数”组件。但是,如果我舍入结果,我会在0和1之间翻转。

玩游戏

int ones = 0;
int zeros = 0;
for (int index = 0; index < 100; index++) {

    double rand = Math.random() * 1;
    if (Math.round(rand) == 1) {
        ones++;
    } else {
        zeros++;
    }
    System.out.println(rand + " - " + (int)Math.round(rand) + " - " + (int)Math.random() * 1);

}

System.out.println("Ones = " + ((float)ones / 100f));
System.out.println("Zeros = " + ((float)zeros / 100f));

这是我的简单测试,我得到了50/50标记(+/-)

正如Hovercraft所指出的,在这种情况下最好使用java.util.Random

答案 4 :(得分:2)

- 使用java.util.Random会更好更容易。

- 使用其的nextBoolean()方法。

<强>例如

public class Rand {

    public static void main(String[] args){

        Random r = new Random();

        System.out.println(r.nextBoolean());  // See there is a equal
                                                      // true-false division
    }

}