我正在尝试使用下面的代码模拟硬币翻转。
public class Coin
{
public static double result;
int[] count = new count[2];
public static void flip()
{
result = Math.random();
}
public static boolean isHeads()
{
if (result == 0.0)
{
count[0]++;
return false;
}
else
{
count[1]++;
return true;
}
}
public static void main(String[] args)
{
flip();
isHeads();
System.out.println(count[0]);
System.out.println(count[1]);
}
}
出于某种原因,Eclipse说的是
import java.util.Random;
即使我明显使用它,也从未使用过。我没有把我的for循环放到上面的代码中但它循环了很多次然后输出结果。无论它循环多少次,它总是返回结果大于0.0,这是不对的。我是否错误地调用Math.random?
答案 0 :(得分:9)
您正在使用Math,它可能正在使用Random,但您并未在任何地方使用Random。
无论它循环多少次,它总是返回结果大于0.0,这是不对的。我是否错误地调用Math.random?
在0.0和1.0之间有2 ^ 53个可能的值,并且由于Random仅使用48位种子,因此您可以生成它将创建的每个double
,并且不会发生任何一个值。如果你使用SecureRandom,你有一个2 ^ 53的机会返回0.0。
答案 1 :(得分:5)
我建议使用
java.util.Random
public static void main(String[] args) throws Exception {
Random rand = new Random();
int headCount = 0;
int tailCount = 0;
for (int i = 0; i < 10; i++) {
int value = rand.nextInt(2);
if (value == 0) {
System.out.println("Heads");
headCount++;
} else {
System.out.println("Tails");
tailCount++;
}
}
System.out.println("Head Count: " + headCount);
System.out.println("Tail Count: " + tailCount);
}
答案 2 :(得分:3)
一旦你修复了你的编译问题,你会发现你的“硬币”不公平:它比“头”更频繁地给你“尾巴”。事实上,你很少得到任何“头”!
这是因为random()
在double
和0
之间提供了1
,而不是int
0
和1
}。因此,您需要按如下方式更改条件:
if (result < 0.5) {
count[0]++;
return false;
} else {
count[1]++;
return true;
}
答案 3 :(得分:2)
Math.Random和java.util.Random是两回事。
static Random random = new Math.Random();
public static void flip() {
result = random.nextDouble();
}
和
public static boolean isHeads() {
if (result > 0.5) {
count[0]++;
return false;
}
//else {
count[1]++;
return true;
//}
}
答案 4 :(得分:1)
您应该创建util.Random的实例并使用它来生成您的数字。
你可以替换
public static void flip()
{
result = Math.random();
}
通过
static Random r = new Math.Random();
public static void flip() {
result = r.nextDouble();
}
而你所需要的实际上是一个布尔值,我建议你使用nextBoolean方法:
static Random r = new Math.Random();
static boolean result;
public static void flip() {
result = r.nextBoolean();
}
public static boolean isHeads() {
count[result?1:0]++;
return result;
}
答案 5 :(得分:1)
Math.random()
是java.lang.Math
类