#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.