Java接受新数组作为输入,尽管我给出了两次源代码

标签 java arrays

在上一个问题中,我知道如何找到数组中最大值的索引值。

现在我的问题是我试图通过将数组 [0] 与最大值交换以及另一个数组 [0] 与最小值交换来创建 2 个不同的数组。

在这里我可以做到这一点,但问题是,首先我将 array[0] 与 Min Value 交换。当我尝试将 array[0] 与最大值交换时,调用的数组是将 array[0] 与最小值交换后的数组输出,而不是输入中的实际数组。

import java.util.Arrays;

public class Cook {
    public static void main(String[] args) {
        int num[] = { 3, 1, 5, 2, 4 };
        int start = 0;
        int maxEnd = getMaxValue(num);
        int minEnd = getMinValue(num);
        System.out.println(Arrays.toString(num));
        getMinvalueString(start, maxEnd, minEnd, num);
        getMaxvalueString(start, maxEnd, minEnd, num);
    }

    private static void getMinvalueString(int start, int maxEnd, int minEnd, int[] num) {
        int[] num1 = num;
        int temp = num1[start];
        num1[start] = num1[minEnd];
        num1[minEnd] = temp;
        System.out.println("After replace Min: " + Arrays.toString(num1));

    }

    private static void getMaxvalueString(int start, int maxEnd, int minEnd, int[] num) {
        int[] num1 = num;
        int temp = num1[start];
        num1[start] = num1[maxEnd];
        num1[maxEnd] = temp;
        System.out.println("After replace: " + Arrays.toString(num1));

    }

    public static int getMaxValue(int[] num) {
        int maxValue = num[0];
        int getMaxIndex = 0;
        for (int i = 1; i < num.length; i++) {
            if (num[i] > maxValue) {
                maxValue = num[i];
                getMaxIndex = i;
            }
        }
        System.out.println(getMaxIndex);
        return getMaxIndex;

    }

    public static int getMinValue(int[] array) {
        int minValue = array[0];
        int getMinIndex = 0;
        for (int i = 1; i < array.length; i++) {
            if (array[i] < minValue) {
                minValue = array[i];
                getMinIndex = i;
            }
        }
        System.out.println(getMinIndex);
        return getMinIndex;
    }

}

虽然我创建了一个新数组 num1,但相同的旧数组 (num) 正在被交换。请让我知道如何解决这个问题。

电流输出

[3, 1, 5, 2, 4]
After replace Min: [1, 3, 5, 2, 4]
After replace: [5, 3, 1, 2, 4]

预期输出

[3, 1, 5, 2, 4]
After replace Min: [1, 3, 5, 2, 4]
After replace: [5, 1, 3, 2, 4]

谢谢

最佳答案

num1getMinvalueStringgetMaxvalueString 方法中引用同一个数组 num,因此进行更改num1 影响 num 引用的同一数组,该数组与您在 main 方法中声明并初始化的数组相同。

如果您希望保持原始数组不变,请将数组的副本传递给每个方法:

    getMinvalueString(start, maxEnd, minEnd, Arrays.copyOf(num,num.length));
    getMaxvalueString(start, maxEnd, minEnd, Arrays.copyOf(num,num.length));

关于Java接受新数组作为输入,尽管我给出了两次源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34154218/

相关文章:

Javascript - 数组 - 将一个数组中的值分配给另一个数组中的字符串

c++ - 我怎样才能制作一个节省内存的网格类?

c - 指向 3D 数组数据切片的 2D 指针数组

java - 文件程序显示错误

java - 原始类型问题的扩大和缩小

java - 当我可以通过引用子类访问所有方法时,为什么还要引用基类?

Java 正则表达式模式

java - 错误 : constructor Card in class Card cannot be applied to given types;

javascript - 使用 for 循环或函数从数组中删除或过滤值

javascript - 为什么 JavaScript 中带有一元运算符++ 的变量在括号内的变量下次出现之前不会将变量更改 1?