Попытка найти минимальное число в пользовательском вводе сканера в Java - PullRequest
2 голосов
/ 09 июля 2020

Я кодирую тестовый усреднитель в Java. Я должен использовать циклы do while, while, if.

У меня пользователь вводит результаты тестов, запрашивая отрицательное число, чтобы оставить while l oop.

Мне нужно отобразить количество введенных баллов, максимальное, минимальное и среднее.

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

Для ввода 95, 93, 92, 91 и -1:

Количество введенных баллов: 4 Наивысшее: 95 Наименьшее: 0 Среднее значение: 92

Мой код:

import java.util.*;

public class Lab7 
{

    public static void main(String[] args) 
    {
        System.out.println("This program computes the average of");
        System.out.println("a list of (nonnegative) exam scores.");
        int sum;
        int numberOfTests;
        int testInput;
        String answer;
        int minimum = 0;
        int maximum = 0;
        Scanner keyboard = new Scanner (System.in);
        
        do
        {
            System.out.println();
            System.out.println("Enter all the scores to be averaged.");
            System.out.println("Enter a negative number after");
            System.out.println("you have entered all the scores.");
            sum = 0;
            numberOfTests = 0;
            testInput = keyboard.nextInt();

            while (testInput >= 0)
            {
                sum = sum + testInput; 
                numberOfTests++;
                

                 if (testInput < minimum)
                {
                    minimum = testInput;
                }
                
                if (testInput > maximum) 
                {
                    maximum = testInput;
                }
    
                testInput = keyboard.nextInt();
            }

            if (numberOfTests > 0) 
            {
                System.out.println("The number of scores entered: " + numberOfTests);
                System.out.println("The Highest: " + maximum);
                System.out.println("The Lowest: " + minimum);
                System.out.println("The average is: " +
                (sum / numberOfTests));    

            }

            else 
            {
                System.out.println("No scores to average.");
            }

            System.out.println("Want to average another exam?");
            System.out.println("Enter yes or no.");
            answer = keyboard.next();
        }
        
        while (answer.equalsIgnoreCase("yes"));
    }

    
}

Ответы [ 2 ]

5 голосов
/ 09 июля 2020

Вы инициализируете minimum с помощью 0, поэтому для положительных входных значений это всегда будет наименьшее значение. Это означает, что if (testInput < minimum) всегда будет false. Чтобы исправить это, вместо этого инициализируйте его Integer.MAX_VALUE.

В общем, рекомендуется начинать значение максимальное с наименьшего возможного значения , например Integer.MIN_VALUE или Double.MIN_VALUE или в вашем случае 0, так как отрицательных оценок нет. Кроме того, минимум должен быть инициализирован максимально возможным значением , как описано выше.

Таким образом, ваши проверки всегда будут работать так, как задумано.

0 голосов
/ 09 июля 2020

Это связано с этой строкой int minimum = 0;, поскольку ваши входные оценки больше 0 , поэтому ваше условие никогда не будет выполнено if (testInput < minimum), а значение minimum никогда не будет изменится и останется 0 . Следовательно, определите его как minimum = Integer.MAX_VALUE

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

public class Solution{
    public static void main(String[] args) 
    {
        int sum = 0, numberOfTests = 0, testInput , minimum = Integer.MAX_VALUE , maximum = Integer.MIN_VALUE;
       
        System.out.println("This program computes the average of \na list of (nonnegative) exam scores. \n");
        
        Scanner keyboard = new Scanner (System.in);
        
        do
        {
            System.out.println();
            System.out.println("Enter all the scores to be averaged.");
            System.out.println("Enter a negative number after \nYou have entered all the scores.");
            
            testInput = keyboard.nextInt();

            while (testInput >= 0){
                sum += testInput; 
            
                numberOfTests++;                

                if (testInput < minimum) minimum = testInput;
                
                if (testInput > maximum) maximum = testInput;
                    
                testInput = keyboard.nextInt();
            }

            if (numberOfTests > 0) 
            {
                System.out.println("The number of scores entered: " + numberOfTests);
                System.out.println("The Highest: " + maximum);
                System.out.println("The Lowest: " + minimum);
                System.out.println("The average is: " +
                ((float)sum / numberOfTests));    
            }

            else 
                System.out.println("No scores to average.");
            

            System.out.println("Want to average another exam?");
            System.out.println("Enter yes or no.");

        }
        
        while (keyboard.nextLine().trim().equalsIgnoreCase("yes"));
        
        keyboard.close();
    }
    
}

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...