Возможно, есть способ найти значения выше и ниже среднего

#java

#java

Вопрос:

Я создаю программу для нахождения среднего значения всех чисел, введенных пользователем, и сохраняю эти числа, чтобы проверить, падает ли введенное число ниже или выше среднего, которое было рассчитано. Моя программа выводит все введенные числа как ниже среднего. у меня есть проверка переполнения стека на наличие подобных проблем, я все это пробовал, но мой вывод по-прежнему отображается только ниже среднего

Это то, что я пробовал

 public void newspaper()
    {
        System.out.println("Question 4 n");
        int youth;
        double avg =0;
        int sum = 0;
        int numYouth = 5;

   //The loop for calculating the average
    for (int i = 1; i <= 5; i  ) 
    {
        System.out.println("Youth "   i   " How many was delivered?");
        youth = in.nextInt();

         sum = sum   youth;
         avg = sum / numYouth;


    }
       System.out.println("Average is: "   avg  "n");

        double aboveAvg = 0;

      //The loop for checking below of above average
        for (int j = 1; j <=5; j  ) 
       {
           if(aboveAvg > avg)
           {                
               System.out.println("Youth "   j   " is above average");
               aboveAvg  ;
           }
           else 
          {
              System.out.println("Youth "   j   " below average");

          }
       }

  }
  

Комментарии:

1. вы отладили свой код? Я думаю, что ваша ошибка в тесте if (aboveAvg > avg)

2. Как вы упомянули, вам нужно сравнить введенное число с вычисленным средним значением, что означает, что вам нужно их сохранить. Итак, в первом цикле for сохраняем youth переменную. внутри некоторой структуры данных, которая, по вашему мнению, подходит для вашей проблемы.

3. Ошибка в операторе if yes. когда я меняю переменные местами, это дает мне только значение выше среднего

4. Можете ли вы уточнить, что означает aboveAvg?

5. @Karim ‘aboveAvg’ используется для определения того, соответствуют ли введенные числа значениям выше среднего или ниже среднего

Ответ №1:

Это возможное решение вашей проблемы: обратите внимание, что вам нужно сохранить пользовательские входные данные, вычислить среднее значение один раз (не внутри цикла for) и, наконец, сравнить сохраненные числа со средним значением, рассчитанным ранее.

 public void newspaper() {
    Scanner in = new Scanner(System.in);
    System.out.println("Question 4 n");
    double avg = 0;
    int sum = 0;
    int[] youths = new int[5];

    // The loop for calculating the average
    for (int i = 0; i < youths.length; i  ) {
        System.out.println("Youth "   (i   1)   " How many was delivered?");
        youths[i] = in.nextInt();

        sum = sum   youths[i];
    }
    // Note that the average can be calculated once, not every iteration
    avg = sum / youths.length;
    System.out.println("Average is: "   avg   "n");

    // The loop for checking below of above average
    for (int i = 0; i < youths.length; i  ) {
        if (youths[i] > avg) {
            System.out.println("Youth "   (i   1)   " is above average");
        } else {
            System.out.println("Youth "   (i   1)   " below average");
        }
    }

}
  

Комментарии:

1. Итак, для хранения пользовательских данных это должен быть массив?

2. Вы можете хранить пользовательские данные в любой структуре данных, которая вам нравится, я выбираю array, потому что это просто для понимания.

3. я на самом деле больше понимаю часть массива. это сработало, спасибо, что объяснили это.

Ответ №2:

Попробуйте использовать массив вместо переменной, см. Приведенный Ниже код

         import java.util.Scanner;
    public class Stackoverflow {
        public void newspaper() {
            System.out.println("Question 4 n");

            double avg = 0;
            int sum = 0;
            int numYouth = 5;
            int youth[] = new int[numYouth];
            Scanner sc = new Scanner(System.in);
            // The loop for calculating the average
            for (int i = 0; i < 5; i  ) {
                System.out.println("Youth "   i   " How many was delivered?");
                youth[i] = sc.nextInt();

                sum = sum   youth[i];
                avg = sum / numYouth;

            }
            System.out.println("Average is: "   avg   "n");

            double aboveAvg = 0;

            // The loop for checking below of above average
            for (int j = 0; j < 5; j  ) {
                if (youth[j] > avg) {
                    System.out.println("Youth "   j   " is above average");
                } else {
                    System.out.println("Youth "   j   " below average");

                }
            }
        }
        public static void main(String[] args) {
            new Stackoverflow().newspaper();
        }
    }
  

Ответ №3:

Вам нужно сохранить числа во временном списке и использовать счетчик ‘ctr’ для увеличения значений соответствующего регистра. Я использовал для каждого цикла для простоты.

 public void newspaper() {
        System.out.println("Question 4 n");
        int youth;
        double avg = 0;
        int sum = 0;
        int numYouth = 5;

        List<Integer> number = new ArrayList<>();
        // The loop for calculating the average
        int ctr = 0;
        for (int i = 0; i < 5; i  ) {
            System.out.println("Youth "     ctr   " How many was delivered?");
            youth = in.nextInt();
            number.add(youth);
            sum = sum   youth;
            avg = sum / numYouth;

        }
        System.out.println("Average is: "   avg   "n");
        ctr = 0;
        // The loop for checking below of above average
        for (int j : number) {
            if (j > avg) {
                System.out.println("Youth "     ctr   " is above average");
            } else {
                System.out.println("Youth "     ctr   " below average");

            }
        }

    }
  

Ответ №4:

Предполагая, что вы пытаетесь «найти среднее значение всех чисел, введенных пользователем, сохраняя эти числа, чтобы проверить, падает ли каждое из введенных чисел ниже или выше среднего, которое было рассчитано», ниже приведены вещи, которые вам нужно исправить:

  1. Часть «хранение этих чисел»
  2. Сравните вычисленное среднее значение с сохраненным числом.

Возможное решение:

  • Используйте список или массив для хранения чисел, введенных пользователем.
  • Вы можете использовать массив, если знаете количество элементов для хранения, прежде чем начинать считывать числа.
  • Считывайте значения из списка / массива, когда вы хотите сравнить введенное значение с вычисленным средним.

     public void newspaper()
    {
        System.out.println("Question 4 n");
        int youth;
        double avg =0;
        int sum = 0;
        int numYouth = 5;
    
        // Create a list to store the entered values
        // List<Integer> enteredNumbers = new ArrayList<Integer>(); 
    
        // Using an array of '5' elements - this 5 comes from numYouth
        int[] enteredNumbers = new int[numYouth]; // better not to 'hardcode'
    
        //The loop for calculating the average
        for (int i = 1; i <= numYouth; i  ) 
        {
           System.out.println("Youth "   i   " How many was delivered?");
           youth = in.nextInt();
    
           enteredNumbers[i-1] = youth; // array is 0-indexed
           sum = sum   youth;
           avg = sum / numYouth;    
       }
    
       System.out.println("Average is: "   avg  "n");
    
       // an int is enough to track the number of values above the average
       int aboveAvg = 0; 
    
       //The loop for checking below of above average
       for (int j = 1; j <= numYouth; j  ) 
       {
           // compare stored value against the average calculated above
           if(enteredNumbers[j-1] > avg) // array is 0-indexed
           {                
               System.out.println("Youth "   j   " is above average");
               aboveAvg  ;
           }
           else 
           {
              System.out.println("Youth "   j   " below average");
           }
       }
       System.out.println(aboveAvg   " Youths are above average");
      

    }

Комментарии:

1. ДА. вы правы. Теперь я изменил решение, чтобы вместо него использовать массив — поскольку arraylist кажется излишним, когда у нас есть numYouth значение.

2. Теперь я все прекрасно понимаю. Спасибо