Программа для игры в гольф? - PullRequest
       15

Программа для игры в гольф?

1 голос
/ 15 октября 2011

Итак, я пытаюсь составить программу, в которой она будет усреднять ваши результаты в гольфе.Я отредактировал стандартный калькулятор усреднения, чтобы он работал:

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){

, но я не уверен, что делать, чтобы она работала правильно.

Ответы [ 4 ]

1 голос
/ 15 октября 2011

Вы никогда не найдете способ вырваться из цикла:

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

будет зацикливаться 2 миллиарда раз (нет, я не преувеличиваю), так каку вас нет другого способа вырваться.

То, что вы, вероятно, хотите, это изменить условие петли на следующее:

int score = 0;

while (score >= 0){

Это произойдет, когда будет введен отрицательный результат.

Кроме того, у вас есть целочисленное деление в конце.Вы хотите сделать число с плавающей запятой, поэтому измените объявление на это:

double average;

и измените эту строку на это:

average = (double)total / 10.;
1 голос
/ 15 октября 2011

Вам нужен какой-то способ выйти из цикла.Например, введите -1:

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

Похоже, что при вычислении среднего значения также есть несколько ошибок:

  • Не всегда делите на 10 - используйтезначение counter.
  • Использовать арифметику с плавающей запятой.Если вам нужно целое число, вы, вероятно, хотите округлить до ближайшего, а не урезать.

Например:

float average = total / (float)counter;
0 голосов
/ 15 октября 2011
while (true) {
    score = input.nextInt();
    if (score == 0) {
        break;
    }
    total = total + score;
    counter++;
}

Теперь ваша программа поймет, что вы закончили вводить оценки, когда вводите невозможную оценку 0.

0 голосов
/ 15 октября 2011

Необходимо указать значение счетчика, значение по умолчанию равно 0, поэтому условие while всегда истинно, поэтому вы будете идти в бесконечном цикле.

...