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