0

那是确切的代码然后我有一个案例 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;
        }
        }
4

5 回答 5

8

只需使用一个java.util.Random对象并简单地调用nextBoolean()它,它将在 50:50 分布中返回 true 或 false。轻松如Math.PI

于 2012-12-05T04:07:04.443 回答
5

这总是四舍五入。

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

你的意图也许是

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

但是,使用 Math.random() 获取一位是非常低效的。

如果您使用 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));
}
于 2012-12-05T09:35:02.703 回答
3

变量talka将始终为零;Math.random 返回一个值,其中 0 <= x < 1; 由于 x 必须小于 1 并且(int)强制转换会截断小数部分,因此整数结果将始终为 0。

从 Math.random 文档中:

返回一个带正号的双精度值,大于或等于 0.0 且小于 1.0。

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

于 2012-12-05T04:44:43.820 回答
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在这种情况下使用。

于 2012-12-05T04:15:31.133 回答
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
    }

}
于 2012-12-05T04:21:31.423 回答