【问题标题】:Trying to swap the maximum and the minimum numbers in an array尝试交换数组中的最大和最小数字
【发布时间】:2021-01-08 00:28:28
【问题描述】:

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

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

我有两个单独的函数来查找最大值和最小值,但我一直停留在值的实际交换上。这两个函数就像我在另一个程序中使用它们一样工作,但我不确定它们是否适用于这个程序。

起初我想通过以某种方式将它们设置为彼此相等来找到它们,但这没有任何结果。

任何帮助将不胜感激。

【问题讨论】:

  • 你不应该得到最大值 value 而是最大值的 index,最小值也是一样的。然后在这些索引处切换值。

标签: java arrays max min


【解决方案1】:
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, -1, 1, 1, 1, 17, 18, 19, 20, 21, 22, 23, 66, 66]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 66, 66, 66, 1, 1, 1, 17, 18, 19, 20, 21, 22, 23, -1, -1]

【讨论】:

    【解决方案2】:

    你真的很亲密。我复制了一些代码并评论了需要进行更改的地方。您仍然可以使用现有代码从控制台填充数组。

    此外,将数组中的第一个元素分配给 min 或 max 并将循环从 1 开始,这点赞不绝口。很多人不考虑这样做。

    int myArray[] = {1,10,-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, 10, -5, 99, 48, -22, 43, 44, 100, 2]
    [1, 10, -5, 99, 48, 100, 43, 44, -22, 2]
    

    【讨论】:

      【解决方案3】:

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

      int[] arr = {1, 3, 5, 6, 4, 2, 8, 7, 9, -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, 5, 6, 4, 2, 8, 7, -3, -1, 9]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多