2016-09-22 6 views
0
import java.util.Scanner; 
public class Swap { 
    public static void main(String[]args){ 
     Scanner kb = new Scanner(System.in); 
     System.out.print("How many integers? "); 
     int size = kb.nextInt(); 

     int[] values = new int[size]; 
     System.out.println("Enter integers:"); 

     for (int i = 0;i < size; i++){ 
      values[i] = kb.nextInt(); 
     } 
     int min = values[0]; 
     for(int i = 0;i < values.length;i++){ 
      if(values[i] < min){ 
       min = values[i]; 
      } 
     } 
     int max = values[0]; 
     for(int i = 0;i < values.length;i++){ 
      if(values[i] > max){ 
       max = values[i]; 
      } 
     }   
    } 
} 

Я просто попадаю на мелкую вещь: я не знаю, как извлечь местоположение min и max, как в индексе их в чтобы обменять их. Я изначально пробовал что-то по линиям значений [мин], но я думаю, что java не держит вашу руку настолько, что понятно.Необходимо поменять местами два элемента в массиве в java

+0

'мин и max' бы фактические значения ... вы должны сохранить' i' переменную в каждой из этих циклов для их замены. таких как 'minIndex = i' и' maxIndex = i'. Где ваши значения. – 3kings

ответ

0

В настоящее время вы храните в min и max результат расчета. Из OOD это плохо, потому что значения в массиве могут меняться между тем и вы получаете недопустимое состояние.

Вместо min и max следует хранить minIndex и maxIndex. Цикл может выглядеть следующим образом:

int maxIndex = 0; 
    for(int i = 0;i < values.length;i++){ 
     if(values[i] > values[maxIndex]){ 
      maxIndex = i; 
     } 
    } 

Теперь легко поменять их местами:

int tmp = values[maxIndex]; 
values[maxIndex]=values[minIndex]; 
values[minIndex]=tmp;