0

在创建了一个简单的 Java 掷骰子游戏后,我决定让它测试 100 万次迭代。无论出于何种原因,用此代码划分两个数字

System.out.println("Wins: "+w+" Losses: "+l);
double avg = 100*(w / l);
System.out.println("Average: "+avg);

无论出于何种原因,这都会打印正确的输赢数量,但是当它除以它时,它只会得到 0.0 任何帮助将不胜感激。

解决的代码:

    double w = 0 , l = 0;
    for(int c=1;c<1000000;c++)
    {
    if(playGame() == true)
    {
        System.out.println("You win!");
        w++;
    }
    else
    {
        System.out.println("You lost!");
        l++;
    }
    }
    System.out.println("Wins: "+w+" Losses: "+l);
    double avg = (100*(w / l))/2;
    System.out.println("Average: "+avg);
4

5 回答 5

0

我怀疑你的wl可能是整数。当您划分整数时,它们不会计算为双精度数,它们会计算为整数,并且它们总是向下舍入

如果确实如此,现在您有 2 个选项

  • 在输入过程中取wl作为双打
  • 在对它们进行任何算术运算之前, castw和to 加倍。l

尝试:

double dWin = w;
double dLoss = l

System.out.println("Wins: "+dWin+" Losses: "+dLoss);
double avg = 100*(dWin / l);
System.out.println("Average: "+avg);
于 2012-09-12T16:21:36.813 回答
0

假设 w 和 l 是你做整数数学的整数。除非分子大于分母,否则整数除法将返回零。

于 2012-09-12T16:21:42.957 回答
0

如果您的输入是整数,那么您的输出将是整数。您的一个或两个输入必须是浮点数或双精度数。

如果它们是整数并且您不能将它们更改为浮点数,您可以这样做

double avg = 100*(w / (l * 1d));

这将使 la 加倍,因此结果是加倍的。

如果没有 *100d,您将 int 值放入 double 中。

于 2012-09-12T16:21:59.190 回答
0

运算的结果是最大的操作数类型......所以如果你/对两个应用运算,int答案将是int

如果您想要精确的平均值,您应该将其中一个操作数类型转换为双精度。

尝试写作

double avg = 100*(((double)w) / l);
于 2012-09-12T16:23:45.680 回答
0

其他人都忘记了乘法和除法的关联规则

double avg = 100.0 * w / l;

会给你正确的答案,避免丑陋的演员:-)

于 2012-09-12T16:39:54.423 回答