所以我有这个方法,它将采用一个整数的ArrayList,我比较两个子数组并预先形成一些数字交换。
我正在比较每个子数组的第一个元素,它只是数组减半,然后如果较大的数字不在左子列表中,则交换元素。之后,我想递归地做同样的事情,但到了上半场。
所以,如果我输入3 5 8 2 1 7 6 4 我想看到这个;
[3,5,8,2,1,7,6,4]
[3,7,8,4,1,5,6,2]
[8,7,3,4,1,5,6,2]
[8,7,3,4,1,5,6,2]
我想要做的就是一旦我完成了我需要的工作,对于基本数组,我需要递归地处理同一个数组的前半部分。但是当我编译时,我得到一个错误,说我有不兼容的类型。所以我假设subList函数没有为我提供ArrayList。
有关gettign的任何指示都能正常工作吗?
public static void tournament(ArrayList<Integer> players){
int mid = players.size()/2;
for(int i=0; i < mid; i++){
if(players.subList(0,mid).get(i) < players.subList(mid,players.size()).get(i)){
int temp = players.subList(0,mid).get(i);
players.subList(0,mid).set(i , players.subList(mid,players.size()).get(i));
players.subList(mid,players.size()).set(i,temp);
}// end if
}// end for
System.out.println(players);
if(players.size() > 2){
tournament(players);
}// end if
}// end tournament
答案 0 :(得分:1)
好的,在ruakh的一点清理帮助下,我已经让它正常工作了。 Greg Kopff是正确的,我无法返回subList,因为它是一个不兼容的类型,所以我所做的就是将两个int元素传递给方法。
这些跟踪子数组的开始位置,并逐步逐步递归递归。
public static void tournament(ArrayList<Integer> players, int left, int right){
for(int i=0; i < right; i++){
if(players.get(i) < players.get(right + i)){
int temp = players.get(i);
players.set(i , players.get(right + i));
players.set(right + i,temp);
}// end if
}// end for
right /= 2;
System.out.println(players);
if(right>=1){
tournament(players,0,right);
}
}// end tournament
感谢您的帮助,这是一些功课,更多的个人作业,所以感谢添加标签,我没有意识到,也没有想到人们给我正确的答案,只是一个指导,因为我知道我必须用我迄今学到的东西来完成这一点。谢谢大家的帮助!
答案 1 :(得分:0)
然而,当我编译时,我得到一个错误,说我有不兼容的类型。所以我假设subList函数没有为我提供ArrayList。
使用Collections API(其中ArrayList
是其中的一部分),最佳做法是使用通用接口声明变量:List
,Set
,{{1} },而不是Map
,ArrayList
和HashSet
等具体实现。
例如,而不是:
HashMap
你应该这样做:
ArrayList<Integer> list = new ArrayList<Integer>();
如果您查看java.util.List.subList()的JavaDoc,您会看到方法签名是这样的:
List<Integer> list = new ArrayList<Integer>();
List<E> subList(int fromIndex, int toIndex)
,作为ArrayList
接口的实现,使用这个完全相同的签名。请注意,返回类型为List
,而不是List
。这意味着ArrayList
不必返回ArrayList.subList()
(尽管可能) - 它只需返回一个符合ArrayList
接口的对象。
那么第一步是什么?将您的方法更改为接受List
而不是List
。 (无论哪种方法调用您的ArrayList
初始方法仍然可以传递tournament()
。)
ArrayList