2012-09-12 53 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; 

會給你正確的答案,避免了難看的投:-)