我正在处理一些初学者的Java问题,这里是我要输出10个随机生成的硬币投标的结果。 (使用Math.random())。
由于某种原因,程序不会一直迭代到10.有时会输出5个结果,或者7个,或8个等等。
有没有理由为什么迭代不总是不变?
public class Coin
{
public static void main(String[] args)
{
for (int i=0; i<11; i++)
{
if (Math.random() < 0.5)
{
System.out.println("H");
}
else if (Math.random() > 0.5)
{
System.out.println("T");
}
}
}
}
答案 0 :(得分:4)
问题来自于每次应该存储结果时都要重新计算随机变量。
您的代码已评论:
if (Math.random() < 0.5) { // if the random value is less than 0.5
System.out.println("H");
} else if (Math.random() > 0.5) { //otherwise, it the new random value is greater than 0.5
System.out.println("T");
}
可以通过以下方式纠正:
double random = Math.random();
if (random < 0.5) {
System.out.println("H");
} else { // if it is not "< 0.5", then surely it is "> 0.5" (can't be equal to 0.5)
System.out.println("T");
}
旁注,你将循环11次,而不是10次,因为有0到10之间的11个数字。
附注2:最好不要在这里使用Math.random()
,而是使用Random.nextBoolean()
,它会直接给出一个随机的布尔值。
答案 1 :(得分:1)
你不需要第二个if
- 此刻,如果你不打印"H"
,你会在每次迭代中抛出第二枚硬币,如果第二枚硬币是尾巴,则仅打印"T"
。
应该只是:
if (Math.random() < 0.5)
{
System.out.println("H");
}
else
{
System.out.println("T");
}
使用原始代码,首次出现的可能性为50/50,在这种情况下,您需要打印"H"
。如果您没有投掷"H"
(即其他50%的时间),您现在只有50/50的机会打印"T"
,因此,您只会在25%的时间内看到"T"
。
因此,平均而言,您将看到7.5个结果,其中5个将是"H"
,其中2.5个将是"T"
。哦,除了你做了11次循环,所以多了1.1次
答案 2 :(得分:0)
作为for
循环的第一行,在第一个if
的正上方,放置:
System.out.println("This is iteration #" + i);
所以你真的看到&#34;代码在运动&#34;,你可以区分循环实际迭代的次数,而不是循环体的不可预测的性质,其中输出是以伪 - 为条件的随机输入。