您好我几天都在研究解决方案,而且我一直试图自己解决这个问题,但我不能。
我有一个ArrayList,我想交换其中的元素。但我想将这两个列表进行比较。所以说如果列表中有8个元素,我想比较列表前半部分中的第一个元素和列表后半部分中的第一个元素。 所以列出[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); }
}
这是我到目前为止所做的,但是当我从命令行运行它时,它只返回一个普通的列表,我完全被难倒了。我宁愿使用循环而不是集合方法,因为它不是我特别熟悉的编程风格。
答案 0 :(得分:0)
看看midPoint
- 它永远不会在循环中发生变化。你不断用midPoint
交换第i个元素(假设“if”条件为真)。 <{1}}之后没有任何元素被触及。