繁体   English   中英

尝试交换数组中的最小值和最大值 java

[英]Trying to swap min and max values in an array java

import java.util.Arrays;
public class Swap
{
public static void main(String args[])
     {        
     Scanner console = new Scanner(System.in);        
     
     System.out.print("What is the size of your array? ");        
     int myArray = console.nextInt();                
     int[] size = new int[myArray];         
     int sum = 0;
     int max = 0;
     int min = 100;   
     int temp = 0;
        for (int i = 0; i < size.length; i++) 
        {              
        System.out.print("Array index " + (i) + ": ");            
        size[i] = console.nextInt();            
        sum += size[i];
        
        
        if (size[i] > max) max = size [i];
        if (size[i] < min) min = size [i];  
        
        
        }

        System.out.println ("\nmaximum value is: " + max);
        System.out.println ("\nminimum value is: " + min);
        System.out.println (Arrays.toString(size));
        
        temp = size[max];
        size[max] = size[min];
        size[min] = temp;

        
        System.out.println (Arrays.toString(size));

    }

}

我在交换数组中的最小值和最大值时遇到问题,我能够很好地找到这些值,我什至找到了一种与临时变量交换的方法,但我无法将其转换为数组。

您使用 max 和 min 作为数组索引来交换您的值。这是不正确的。相反,您必须保留 min 和 max 索引,并使用它们在数组中进行交换。 我建议你像这样完成你的代码:

 import java.util.Arrays;
 public class Swap
 {
  public static void main(String args[])
 {        
 Scanner console = new Scanner(System.in);        
 
 System.out.print("What is the size of your array? ");        
 int myArray = console.nextInt();                
 int[] size = new int[myArray];         
 int sum = 0;
 int max = 0;
 int min = 100; 
 int maxIndex=0;
 int minIndex=0;  
 int temp = 0;
    for (int i = 0; i < size.length; i++) 
    {              
    System.out.print("Array index " + (i) + ": ");            
    size[i] = console.nextInt();            
    sum += size[i];
    
    
    if (size[i] > max){
       max = size [i];
       maxIndex=i;
     }
    if (size[i] < min) {
         min = size [i];
         minIndex=i;
       }  
    
    
    }

    System.out.println ("\nmaximum value is: " + max);
    System.out.println ("\nminimum value is: " + min);
    System.out.println (Arrays.toString(size));
    
    temp = size[maxIndex];
    size[maxIndex] = size[minIndex];
    size[minIndex] = temp;

    
    System.out.println (Arrays.toString(size));

  }

}

只有最大值和最小值的部分。

 int max = Integer.MIN_VALUE;
 int min = Integer.MAX_VALUE;
 int iAtMax = -1;
 int iAtMin = -1;   
 for (int i = 0; i < size.length; i++) {              
     if (iAtMax == -1 || max < size[i]) {
         iAtMax = i;
         max = size[i];
     }
     if (min <= size[i]) {
         iAtMin = i;
         min = size[i];  
     }
 }
 if (iAtMax != -1) {
     int temp = size[iAtMax];
     size[iAtMax] = size[iAtMin];
     size[iAtMin] = temp;
 }

您可以初始化maxmin ,以便循环中的更新始终更新。 然后你必须使用<= max resp。 >= min更新索引。 (见上面的min )或者你可以检查是否已经有最大值和最小值。

如果数组为空(或大小为 1),则不能(分别不需要)交换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM