尝试交换数组中的最大值和最小值

问题描述

我正在尝试在程序中交换数组中的最大值和最小值。 这是代码

public static void main(String[] args) 
{
    Scanner in = new Scanner(system.in);
    
    int myArray [] =  new int[25];
    
    for(int i = 0; i < myArray.length; i++)
    {
        System.out.println("Enter a number: ");
        myArray[i] = in.nextInt();
    }
    int maximum = maxnumber(myArray);
    int minimum = minNumber(myArray);
    
    
    
    System.out.println(Arrays.toString(myArray));
}

 public static int maxnumber(int[] arr)
   {
      int maximumValue = arr[0];
      //finds the maximum value in an array
      for(int a = 1; a < arr.length; a++)
      {
         if(arr[a] > maximumValue)
         {
            maximumValue = arr[a];
         }
      }
      return maximumValue;
   }

 public static int minNumber(int[] arr)
   {
      int minimumValue = arr[0];
      //finds the minimum value in an array
      for(int a = 1; a < arr.length; a++)
      {
         if(arr[a] < minimumValue)
         {
            minimumValue = arr[a];
         }
      }
      return minimumValue;
   }
}

我有两个单独的函数来查找最大值和最小值,但是我一直在实际交换这些值。这两个函数的工作方式与我在其他程序中使用的一样,但是我不确定它们是否适用于该程序。

起初,我想通过以某种方式将它们设置为彼此相等来找到它们,但这一无所获。

任何帮助将不胜感激。

解决方法

public static void main(String... args) {
    Scanner scan = new Scanner(System.in);
    int[] arr = new int[25];

    System.out.format("Enter array int numbers (%d in total): ",arr.length);

    for (int i = 0; i < arr.length; i++)
        arr[i] = scan.nextInt();

    System.out.println(Arrays.toString(arr));
    swamMinMax(arr);
    System.out.println(Arrays.toString(arr));
}

private static void swamMinMax(int[] arr) {
    int min = Integer.MAX_VALUE;
    int max = Integer.MIN_VALUE;

    for (int i = 0; i < arr.length; i++) {
        min = Math.min(min,arr[i]);
        max = Math.max(max,arr[i]);
    }

    for (int i = 0; i < arr.length; i++) {
        if (arr[i] == min)
            arr[i] = max;
        else if (arr[i] == max)
            arr[i] = min;
    }
}

输出:

Enter array int numbers (25 in total): 1 2 3 4 5 6 7 8 9 10 -1 -1 -1 14 15 16  17 18 19 20 21 22 23 66 66
[1,2,3,4,5,6,7,8,9,10,-1,1,17,18,19,20,21,22,23,66,66]
[1,-1]
,

您真的很亲密。我复制了一些代码,并注释了需要进行更改的位置。您仍然可以使用现有代码从控制台填充阵列。

此外,为将数组中的第一个元素分配给min或max并在1处开始循环而表示的敬意。很多人都不打算这样做。

int myArray[] = {1,-5,99,48,-22,43,44,100,2};
    
System.out.println(Arrays.toString(myArray));   // print original array
int maxIdx = maxNumber(myArray);                // get index of max
int minIdx = minNumber(myArray);                // get index of min
    
// now swap max and min using the returned indices.
int save = myArray[maxIdx];
myArray[maxIdx] = myArray[minIdx];
myArray[minIdx] = save;
System.out.println(Arrays.toString(myArray));   // print the altered array

    
public static int maxNumber(int[] arr) {
    int maximumValue = arr[0];
    // finds the maximum value in an array
    int idx = 0;                                    //idx = 0 to start
    for (int a = 1; a < arr.length; a++) {
        if (arr[a] > maximumValue) {
            idx = a;                                //save index of current max
            maximumValue = arr[a];
        }
    }
    return idx;                                     // return index of max
}
    
public static int minNumber(int[] arr) {
    int minimumValue = arr[0];
    // finds the minimum value in an array
    int idx = 0;                                    // idx = 0 to start
    for (int a = 1; a < arr.length; a++) {
        if (arr[a] < minimumValue) {
            idx = a;                                // save index of current min
            minimumValue = arr[a];
        }
    }
    return idx;                                     // return index of min
}

这将打印

[1,2]
[1,2]
,

您可以使用 IntStream 查找最大和最小元素的索引,然后交换它们的值:

int[] arr = {1,-3};
// indexes of the maximum and minimum elements
int max = IntStream.range(0,arr.length)
        .boxed().max(Comparator.comparing(i -> arr[i])).orElse(-1);

int min = IntStream.range(0,arr.length)
        .boxed().min(Comparator.comparing(i -> arr[i])).orElse(-1);
// swap the values
int temp = arr[max];
arr[max] = arr[min];
arr[min] = temp;
System.out.println(Arrays.toString(arr));
// [1,-3,9]