2012-04-01 77 views
2

您好我一直在努力尋找解決方案,我一直試圖找出自己的,但我不能。比較列表中的元素並交換它們。 Java

我有一個ArrayList,我想交換它中的元素。但我想比較一下列表中的一半。所以說,如果列表中有8個元素,我想比較列表前半部分的第一個元素和列表後半部分的第一個元素。 因此,列表[4]和列表[4],如果4大於0,我想交換它們,然後我想增加0和1,列表的一半一個,直到我= 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); } 

} 

這是我到目前爲止,但是當我在命令行中運行它,它只是返回一個普通的列表,我完全難倒。我更願意使用循環而不是集合方法,因爲它不是我特別熟悉的編程風格。

回答

0

看看midPoint - 它在循環內部永遠不會改變。您不斷與midPoint交換第i個元素(假設「if」條件爲真)。 midPoint之後沒有任何元素被觸及。

+0

在java中有LINq嗎? – 2012-04-01 00:18:16