2012-09-12 55 views
0

创建一个简单的java胡扯游戏后,我决定让它测试一百万次迭代。无论出于何种原因,将两个数字与此代码计算两个数字的平均值返回0.0(Java)

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); 
+7

是'w'和'l'' int's? – Baz

+0

@巴兹,或'W'是0 :) – Augusto

回答

0

我怀疑你wl可能是整数。当你把int型,他们不计算双打,他们评估为整数,他们总是本轮下跌

现在你有2种选择,如果确实是

  • 采取wl作为双打的情况下输入期间
  • 演员wl在您对它们进行任何算术运算之前加倍。

尝试:

double dWin = w; 
double dLoss = l 

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

我学到了一些新东西,谢谢 – Wijagels

0

假设W和L是整数你做的整数运算。除非分子大于分母,否则整数除法将返回零。

+0

谢谢!只是改变他们w和l双打,现在工作正常 – Wijagels

0

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

如果它们是整数,你不能改变它们漂浮你可以做

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

这将使微升双,这样的结果是双。

没有* 100d你将一个int值放在一个double中。

0

操作的结果是最大的操作数键入 ...所以,如果你在两个int申请/操作答案是int

如果你想要一个精度的平均值,你应该将其中一个操作数转换为double。

试着写

double avg = 100*(((double)w)/l); 
0

其他人都被遗忘乘法和除法的关联规则

double avg = 100.0 * w/l; 

会给你正确的答案,避免了难看的投:-)