尝试交换数组中的最大和最小数字
Posted
技术标签:
【中文标题】尝试交换数组中的最大和最小数字【英文标题】: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,最小值也是一样的。然后在这些索引处切换值。 【参考方案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]
【讨论】:
以上是关于尝试交换数组中的最大和最小数字的主要内容,如果未能解决你的问题,请参考以下文章