在上一个问题中,我知道如何找到数组中最大值的索引值。
现在我的问题是我试图通过将数组 [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]
谢谢
最佳答案
num1
在 getMinvalueString
和 getMaxvalueString
方法中引用同一个数组 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/