Программа оценки гольфа?

#java #average

#java #среднее

Вопрос:

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

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

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

Комментарии:

1. Ваш while цикл остановится только тогда, когда counter он не будет больше или равен нулю, и вы увеличиваете counter с counter , так что это никогда не так. Вы уверены, что хотите, чтобы это работало именно так? Или как еще вы хотите, чтобы ваш цикл заканчивался?

Ответ №1:

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

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

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

Вероятно, вы хотите изменить условие вашего цикла на это:

 int score = 0;

while (score >= 0){
  

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

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

 double average;
  

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

 average = (double)total / 10.;
  

Ответ №2:

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

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

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

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

Например:

 float average = total / (float)counter;
  

Ответ №3:

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

Ответ №4:

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

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