Сравнение элементов в списке и их замена. Джава - PullRequest
2 голосов
/ 01 апреля 2012

Привет, я работал над решением в течение нескольких дней, и я пытался выяснить это самостоятельно, но я просто не могу.

У меня есть ArrayList, и я хочу поменять его местами. Но я хочу сравнить список пополам. Скажем, если бы в списке было 8 элементов, я бы хотел сравнить первый элемент в первой половине списка с первым элементом во второй половине списка. Так что list [0] со списком [4], и если 4 больше 0, я хочу поменять их местами, тогда я хочу увеличить 0 и на 1, и половину списка на единицу, пока i = 4. Я должен запустить его из командной строки.

 import java.util.Arrays;
 import java.util.ArrayList;
 import java.util.Scanner; 
import java.util.Collections;

public class TennisTournament {
     public static void main (String [] args) {
    Scanner input = new Scanner(System.in);
    ArrayList <Integer> nums = new ArrayList<Integer>();
    while (input.hasNextInt()) {
      nums.add(input.nextInt());
    }
    tournament(nums);   }
     public static void tournament(ArrayList <Integer> list) {
    int midPoint = list.size()/2; // returns the index number of half of the lists size
    for (int i = 0; i < midPoint; i++) { // while is bigger than mid point, increment by one
      if (list.get(i) < list.get(midPoint)) {
          Collections.swap(list, i, midPoint);
          System.out.print(list);
      }
    }
    System.out.println(list);   }

}

Это то, что у меня есть до сих пор, но когда я запускаю его из командной строки, он просто возвращает обычный список, и я совершенно ошарашен. Я бы предпочел использовать цикл, а не метод коллекций, так как это не тот стиль программирования, с которым я хорошо знаком.

1 Ответ

0 голосов
/ 01 апреля 2012

Посмотрите на midPoint - внутри цикла оно никогда не меняется.Вы постоянно обмениваете i-й элемент (при условии, что условие «если» верно) с midPoint.Ни один элемент после midPoint никогда не трогается.

...