Как распечатать правильный минимум и максимум из пользовательского ввода

Я пытаюсь написать программу, которая позволяет пользователю вводить количество случайных оценок, которые он хочет отобразить, а также сумму, среднее, минимальное и максимальное из сгенерированного списка. Оценки варьируются от 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;
    }
}
Другие вопросы по тегам