首页 > 解决方案 > 找出最大值和最小值以及它们在数组中出现的次数。找出最大值最先出现和最小值最后出现的位置

问题描述

编写一个 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));
            
            
       }
    }
}

标签: java

解决方案


In your answer you you loop twice in your array. You can actually avoid that.

Here I have re-wrote your Max_Or_Min method. Please also note you no longer need Occurrence method as well.

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);
}

Note: max_first_occurs and min_last_occurs integers are represent the index in the array which starts with 0


推荐阅读