Необходимо отобразить максимальную и минимальную оценку из списка чисел - PullRequest
0 голосов
/ 03 ноября 2019

Мне нужно ввести список оценок и сделать остановку кода при вводе символа. Затем будет отображаться максимальная оценка и минимальная оценка.

Я создал while loop, но когда я запускаю код, он продолжает цикл и не останавливается.

public class MaxMinGrades{
  public static void main(String[] args){
    double maxGrade = Double.MAX_VALUE;
    double minGrade = Double.MIN_VALUE;
    Scanner input = new Scanner(System.in);
    System.out.println("Enter as many student grades as you like. Enter a character to stop.");
    double grades = input.nextDouble();

    while(input.hasNextDouble()) {
      if (grades > maxGrade) {
        maxGrade = grades;
      }
      if (grades < minGrade) {
        minGrade = grades;
      }
    }
    System.out.println("The highest grade is: " + maxGrade);
    System.out.println("The lowest grade is: " + minGrade);
  }
}

Я бы ввел: 50 66.85 73.5 78.9 77 q.

Вывод будет: Высшая оценка: 78.9Самая низкая оценка: 50.0

Ответы [ 3 ]

0 голосов
/ 03 ноября 2019

Пара баллов

1. Как только вы получите первую запись, вам нужно назначить Min и Max с этим значением.

2. переменные оценки должны быть обновлены с последним вводом внутри цикла.

public class MaxMinGrades {
public static void main(String[] args){
    double maxGrade = Double.MAX_VALUE;
    double minGrade = Double.MIN_VALUE;
    Scanner input = new Scanner(System.in);
    System.out.println("Enter as many student grades as you like. Enter a character to stop.");
    double grades = input.nextDouble();

    System.out.println("first entry="+grades);
    minGrade = maxGrade = grades;

    while(input.hasNextDouble()) {
        grades = input.nextDouble();
        if (grades > maxGrade) {
            maxGrade = grades;
        }
        if (grades < minGrade) {
            minGrade = grades;
        }
    }
    System.out.println("The highest grade is: " + maxGrade);
    System.out.println("The lowest grade is: " + minGrade);
}

}

0 голосов
/ 03 ноября 2019
public class MaxMinGrades{
  public static void main(String[] args){
    double maxGrade = 0.0;
            double minGrade = 100.0;
            Scanner input = new Scanner(System.in);
            System.out.println("Enter as many student grades as you like. Enter a character to stop.");


            while(input.hasNextDouble()) {
            double grades = input.nextDouble();
              if (grades > maxGrade) {
                maxGrade = grades;
              }
              if (minGrade > grades) {
                minGrade = grades;
              }
            }
            System.out.println("The highest grade is: " + maxGrade);
            System.out.println("The lowest grade is: " + minGrade);
  }
}

При этом внутри while loop возникает состояние разрыва. Когда что-то меняется, проверяется условие boolean.

0 голосов
/ 03 ноября 2019

В цикле while нет условия прерывания. Сканер продолжит прослушивание ввода. Цикл завершится только в том случае, если введен не двойной символ.

Вы также фактически не получаете следующий ввод на каждой итерации. Вам нужно вызвать input.nextDouble() внутри цикла.

Если вы хотите, чтобы он выходил самостоятельно, вам нужно добавить условие прерывания. Например, вы можете остановиться после определенного количества входов, таких как:

int gradeCount = 0;
while(input.hasNextDouble() && gradeCount < 6) {
  grades = input.nextDouble();
  gradeCount += 1;

  // your logic here
}
...