2011-10-15 57 views
1

所以我試圖制定一個程序,它平均你的高爾夫比分。我編輯的標準平均計算器,使其工作:高爾夫比分計劃?

import java.util.Scanner; 
public class Test { 
public static void main(String args[]){ 
    Scanner input = new Scanner(System.in); 
    int total = 0; 
    int score; 
    int average; 
    int counter = 0; 

    while (counter >= 0){ 
    score = input.nextInt(); 
    total = total + score; 
    counter++; 
    } 
    average= total/10; 
    System.out.println("Your average score is "+ average); 
} 
} 

但是,當我輸入分數,我可以繼續進入無限的成績,它從不平均值他們。它只是繼續期待另一個分數。我知道它與這條線有關:

while (counter >= 0){ 

但我不知道該怎麼辦,所以它的工作原理是正確的。

+0

當'counter'不低於或相等更大,你'while'循環纔會停止爲零,並且您用'counter ++'遞增'counter',所以絕不是這種情況。你確定這就是你想要它工作的方式?或者你還希望你的循環結束? – birryree

回答

1

你永遠不會找到一個方法來打破循環:

while (counter >= 0){ 
    score = input.nextInt(); 
    total = total + score; 
    counter++; 
} 

將循環2十億倍(不,我不是誇大其詞),因爲你沒有別的辦法。

你可能需要的是改變你的循環條件這一點:

int score = 0; 

while (score >= 0){ 

這將打破進入負得分時。

此外,你在最後有一個整數除法。你想浮點,所以更改聲明如下:

double average; 

和改變這一行這樣的:

average = (double)total/10.; 
1

你需要一些方法來擺脫循環。例如,輸入-1:

int score = input.nextInt(); 
if (score < 0) { break; } 
total += score; 

你似乎也有一對夫婦的錯誤在平均值的計算:

  • 不要總是除以10 - 使用counter值。
  • 使用浮點運算。如果你需要一個int,你可能想舍入到最近而不是截斷。

例如:

float average = total/(float)counter; 
0

您必須指定計數器的值,默認值是0,所以這段時間的情況總是如此,所以你會無限循環。

0
while (true) { 
    score = input.nextInt(); 
    if (score == 0) { 
     break; 
    } 
    total = total + score; 
    counter++; 
} 

現在你的程序將實現,當你進入是不可能的分數你完成輸入分數0