gpt4 book ai didi

java - 两个值不会产生应有的商

转载 作者:行者123 更新时间:2023-11-30 07:25:24 26 4
gpt4 key购买 nike

我目前正在为学校做作业,我需要创建一个程序,使用 Math.random() 来获取随机值,并根据该值输出“正面”或“反面”。需要执行 10 次。然后,它需要找到程序输出头的次数百分比,以及输出尾部的次数。但是,它无法正常工作。它总是输出正面/反面的 throw 率为 0%。有人可以解释一下为什么吗?

public class HeadsTails
{
public static void main(String[] args)
{
int v;
double i;

int heads = 0, tails = 0;

double headsPercent, tailsPercent;

for(v = 1; v <= 10; ++v)
{
i = Math.random();
if(i <= 0.5)
{
System.out.println("Heads");
heads = heads + 1;
}
else if(i > 0.5)
{
System.out.println("Tails");
tails = tails + 1;
}
}
headsPercent = (heads / 10) * 100;
tailsPercent = (tails / 10) * 100;
System.out.println("Heads were " + headsPercent + "% of the tosses.");
System.out.println("Tails were " + tailsPercent + "% of the tosses.");
}
}

除了那些让程序正常运行的改进之外,我也对任何可以做出的改进持开放态度。

最佳答案

问题是整数数学。 headstails都是int ,所以:

heads / 10

...产生 int结果,在你的情况下几乎总是 0,因为在 int 中-土地,1 / 10 , 2 / 10 ,通过9 / 10都是0 。唯一能得到其他结果的情况是,如果所有的卷都是正面或全部都是反面,其中 10 / 101 .

转换到 double在做数学之前:

headsPercent = ((double)heads / 10) * 100;
tailsPercent = ((double)tails / 10) * 100;

这样做fixes the problem .

<小时/>

旁注 1:您可以使用 += 添加到变量,例如:

heads += x;

当然,当您添加的是 1 时,您可以只使用增量运算符,或者前缀:

++heads;

或后缀

heads++;

(就更新 headstails 而言,哪个并不重要。)

旁注 2:您不需要 else if (i > 0.5) 。如果你考虑一下逻辑,你就会得到 if (i <= 0.5) ... else ...这意味着i肯定是> 0.5一旦你到达else ,不需要if (i > 0.5)部分。

如果你这样做,你甚至不需要 i不再:

for(v = 1; v <= 10; ++v)
{
if(Math.random() <= 0.5)
{
System.out.println("Heads");
++heads;
}
else
{
System.out.println("Tails");
++tails;
}
}

关于java - 两个值不会产生应有的商,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36887722/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com