Как распечатать правильный минимум и максимум из пользовательского ввода
Я пытаюсь написать программу, которая позволяет пользователю вводить количество случайных оценок, которые он хочет отобразить, а также сумму, среднее, минимальное и максимальное из сгенерированного списка. Оценки варьируются от 60 до 100.
Программа правильно печатает мин, а сумма складывает ранее сгенерированную сумму вместе с вновь сгенерированной. Как я могу изменить его так, чтобы он давал правильный результат для минимума и чтобы он прекратил добавлять предыдущую сумму к новой? Любая помощь будет оценена.
Ссылка на изображение для вывода показывает минимальную выходную проблему. Минимум должен быть 66.0, но он говорит 59.0. выходной импорт java.util.Scanner;
public class A03C
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
System.out.print("How many scores? ");
int howMany = input.nextInt();
double score = 0;
double sum = 0;
double average = 0;
double max = 0;
double min = 60;
while (howMany > 0)
{
for (int i = 1; i <= howMany; i++)
{
score = 60 + (int)(Math.random() * ((100 - 60) +1));
if (letterGrade(score));
sum += score++;
average = (sum/howMany);
if (score > max)
max = score;
if (score < max)
min = score;
}
System.out.println("Sum: " + sum);
System.out.println("Average: " + average);
System.out.println("Max: " + (max - 1));
System.out.println("Min: " + (min - 1));
System.out.println("How many scores? ");
howMany = input.nextInt();
}
}
public static boolean letterGrade(double score)
{
if (score >= 92.0)
System.out.println(score + " is an A");
else if (score >= 83.0)
System.out.println(score + " is a B");
else if (score >= 75.0)
System.out.println(score + " is a C");
else
System.out.println(score + " is an F");
return false;
}
}
2 ответа
Прежде чем продолжить, я определенно думаю, что вы должны прочитать комментарий @joe C. Как я понимаю, вы новичок, я объясню изменения, которые я сделал.
import java.util.Scanner;
public class A03C
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
System.out.print("How many scores? ");
int howMany = = input.nextInt();
double score = 0;
double sum = 0;
double average = 0;
double max = 60;
double min = 100;
while (howMany > 0)
{
for (int i = 1; i <= howMany; i++)
{
score = 60 + (int)(Math.random() * ((100 - 60) +1));
letterGrade(score);
sum += score++;
average = (sum/howMany);
if (score > max)
max = score;
if (score < min)
min = score;
}
System.out.println("Sum: " + sum);
System.out.println("Average: " + average);
System.out.println("Max: " + (max - 1));
System.out.println("Min: " + (min - 1));
System.out.println("How many scores? ");
howMany = input.nextInt();
}
}
public static void letterGrade(double score)
{
if (score >= 92.0)
System.out.println(score + " is an A");
else if (score >= 83.0)
System.out.println(score + " is a B");
else if (score >= 75.0)
System.out.println(score + " is a C");
else
System.out.println(score + " is an F");
}
}
Начиная с функции letterGrade. Поскольку функция всегда возвращает false и просто печатает предложение, вы можете заменить boolean на void.
Другая ошибка, которую вы сделали, заключалась в том, что, если вы хотите найти max и min, переменные должны принимать обратное значение, которое вы хотите. Таким образом, переменная max должна принимать минимальную переменную (60) и максимальное значение (100).
Наконец, для изменения переменных max и min вы должны сравнить новое значение с его текущим значением. Это для того, чтобы изменить минимальное значение, например, вы должны сравнить счет с текущим минимальным значением.
Надеюсь, поможет.
Просто очистите переменную суммы после выполнения, также я изменил возвращение letterGrade на true:
import java.util.Scanner;
public class A03C {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("How many scores? ");
int howMany = input.nextInt();
double score = 0;
double sum = 0;
double average = 0;
double max = 0;
double min = 60;
while (howMany > 0) {
for (int i = 1; i <= howMany; i++) {
score = 60 + (int) (Math.random() * ((100 - 60) + 1));
if (letterGrade(score))
sum += score++;
average = (sum / howMany);
if (score > max)
max = score;
if (score < max)
min = score;
}
System.out.println("Sum: " + sum);
System.out.println("Average: " + average);
System.out.println("Max: " + (max - 1));
System.out.println("Min: " + (min - 1));
System.out.println("How many scores? ");
sum = 0;
howMany = input.nextInt();
}
}
public static boolean letterGrade(double score) {
if (score >= 92.0)
System.out.println(score + " is an A");
else if (score >= 83.0)
System.out.println(score + " is a B");
else if (score >= 75.0)
System.out.println(score + " is a C");
else
System.out.println(score + " is an F");
return true;
}
}