Как найти наименьший элемент в массиве, введенном пользователем? Почему наименьший элемент отображается равным нулю?

#java #arrays #element

#java #массивы #элемент

Вопрос:

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

 import java.util.Scanner;
public class Average {

    public static void main (String[] args) {
        
        Scanner input = new Scanner(System.in);
        
        System.out.println("Enter the number of elements:");
        int length = input.nextInt();
        
        int[] num = new int[length];
        System.out.println("Enter the "  length    " array elements:");
        int sum = 0;
         int large,small;
         large =small = num[0]; 
         
         for (int i=0; i<length;i  ) {
            num[i] = input.nextInt();
            sum = sum  num[i];
              }
         
        for (int i=0; i<length;   i) {
            if (num[i]<small) {
                 small = num[i];
            }
              
             if(num[i]> large) {
                 large = num[i];
            }
             }
        
        double avg = sum/length;
        System.out.println("The sum is "  sum);
        System.out.println("The average is "  avg);
        System.out.println("The smallest element is "  small);
        System.out.println("The largest element is "  large);
        }
}
  

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

1. инициализацию large =small = num[0]; следует выполнять после того, как пользователь ввел значения массива, а не до

Ответ №1:

 import java.util.Scanner;

class Average {
    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        System.out.println("Enter the number of elements:");
        int length = input.nextInt();

        int[] num = new int[length];
        System.out.println("Enter the "   length   " array elements:");
        int sum = 0;
        int large, small;

        for (int i = 0; i < length; i  ) {
            num[i] = input.nextInt();
            sum = sum   num[i];
        }

        large = small = num[0]; // small should be assigned after num is input
        
        for (int i = 0; i < length;   i) {
            if (num[i] < small) {
                small = num[i];
            }

            if (num[i] > large) {
                large = num[i];
            }
        }

        double avg = sum / length;
        System.out.println("The sum is "   sum);
        System.out.println("The average is "   avg);
        System.out.println("The smallest element is "   small);
        System.out.println("The largest element is "   large);

    }
}
  

Ответ №2:

Да, это происходит потому, что по умолчанию ваше поле small равно 0.

А теперь давайте шаг за шагом рассмотрим ваш оператор if

         if (num[i]<small) {
             small = num[i];
        }
  

пример для чисел: 22,11,6,

 So first step is num[0] < 0, why 0 as mention before small = 0 by default
Step two num[1] < 0, small stills stay 0
Step Three num[2] < 0, small stills stay 0.
  

Чего вам не хватает, вам нужно присвоить значение small на первой итерации вашего цикла for, например:

        for (int i=0; i<length;   i) {
            if(i == 0){
                small = num[i];
            }
            if (num[i]<small) {
                small = num[i];
            }

            if(num[i]> large) {
                large = num[i];
            }
        }
  

Теперь ваша программа должна работать 🙂

Ответ №3:

если вы используете java 8 или выше, вы можете использовать метод потоков массивов. это упрощает работу с массивами. для получения дополнительной информации

сначала импортируйте массивы как import java.util.Arrays;

 System.out.println("The sum is "   Arrays.stream(num).sum());
System.out.println("The average is "   Arrays.stream(num).average());
System.out.println("The smallest element is "   Arrays.stream(num).min());
System.out.println("The largest element is "   Arrays.stream(num).max());