найдите максимум и минимум и сколько раз они оба встречаются в массиве. Узнайте позиции, в которых максимум происходит первым, а минимум-последним

#java

Вопрос:

Напишите программу java, чтобы найти максимум и минимум и сколько раз они оба встречаются в массиве из n элементов. Выясните позиции, в которых максимум происходит первым, а минимум-последним.

Я хочу знать В if заявлении, которое я пишу:

 if(array[i] > Max)
               {
                 Max = array[i];
                 Max_Count  = 1;
                 Max_First_Occurrence = i;
                }
 

Почему я получаю результат ошибки в этом четном Max_Count начальном значении 0.
и я получаю правильное значение, делая это:

 if(array[i] > Max)
               {
                 Max = array[i];
                 Max_Count = 1;
                 Max_First_Occurrence = i;
                }
 

То же самое и для минимума.

Вот что я попробовал:

     import java.util.Arrays;
import java.util.Scanner;

public class A8HW1{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        System.out.print("Enter array length: ");
        int size = sc.nextInt();
        
        int [] array = new int[size];
        
        for(int i = 0; i < size; i  )
              array[i] = (int) (Math.random() * ((100 - 0)   1))   0;
        
        System.out.println( "n"  Arrays.toString(array));
        
        Max_Or_Min(array);
    }
    
  public static void Max_Or_Min(int [] array)
   {
     if(array.length == 1)
      {
        System.out.println("Minimum = "   array[0]);
        System.out.println("Maximum = "   array[0]);
      }
    else
      {
        int Max = Integer.MIN_VALUE , Min = Integer.MAX_VALUE , Max_Count = 0, Min_Count = 0,
            Max_First_Occurrence = -1 , Min_Last_Occurrence = -1;
                
            for(int i = 0; i < array.length; i  )
               {
                 if(array[i] > Max)
                   {
                     Max = array[i];
                     Max_Count  = 1;
                     Max_First_Occurrence = i;
                    }
              else if(array[i] == Max)
                     {
                       Max_Count  = 1;
                     }
              
                     
                    if(array[i] < Min)
                     {
                       Min = array[i];
                       Min_Count  = 1;
                       Min_Last_Occurrence = i;
                     }
              else if(array[i] == Min)
                     {
                        Min_Count  = 1;
                        Min_Last_Occurrence = i;
                     }
                  }
        
            System.out.println("nMaximum = "   Max);
            System.out.println("Minimum = "   Min);
            
            
            
            String x = (Max_Count > 1) ? "times." : "time.";
            System.out.println("nMaximum Occurred = "   Max_Count   " "   x);
            
            String y = (Min_Count > 1) ? "times." : "time.";
            System.out.println("Minimum Occurred = "   Min_Count   " "   y);
            
            
            System.out.println("nFirst Maximum Occured on position = "   (Max_First_Occurrence   1));
            System.out.println("Last Minimum Occured on position = "   (Min_Last_Occurrence   1));
            
            
       }
    }
}
 

Ответ №1:

В своем ответе вы дважды повторяете цикл в своем массиве. Вы действительно можете этого избежать.

Здесь я переписал ваш Max_Or_Min метод. Пожалуйста, также обратите внимание, что вам больше не нужен Occurrence метод.

 public static void Max_Or_Min(int [] array) {
    int min = Integer.MAX_VALUE;
    int max = Integer.MIN_VALUE;

    int min_count = 1;
    int max_count = 1;

    int max_first_occurs = -1;
    int min_last_occurs = -1;

    for (int i = 0; i < array.length; i  ) {
        int x = array[i];

        if (x > max) { max = x; max_count = 1; max_first_occurs = i; }
        else if (x == max) { max_count  ; }

        if (x < min) { min = x; min_count = 1; min_last_occurs = i; }
        else if (x == min) { min_count  ; min_last_occurs = i; }
    }

    System.out.println("Max: "   max);
    System.out.println("Min: "   min);

    System.out.println("Max count: "   max_count);
    System.out.println("Min count: "   min_count);

    System.out.println("Max first occurs at: "   max_first_occurs);
    System.out.println("Min last occurs at: "   min_last_occurs);
}
 

Примечание: max_first_occurs и min_last_occurs целые числа представляют индекс в массиве, который начинается с 0

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

1. Зачем использовать расширенный цикл для каждого, когда вам нужно значение индекса? Мне потребовалась пара минут, чтобы понять, что я делаю. Ваш код кажется немного запутанным для новичка.

2. @GilbertLeBlanc Я обновил свой ответ. Спасибо за вашу проницательность!

3. @Aadav рад вам помочь! Если это решило ваш вопрос, пожалуйста, примите это как ответ. Ура!