问题描述
我正在尝试在程序中交换数组中的最大值和最小值。 这是代码:
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]