打印输出为{first max,first min,second max,second min,third max,third min等等.....}
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import compl.compl;
public class Arraylist1 {
public static void main(String args[]){
List <Integer>list= new ArrayList <Integer> ( );
list.add(20);
list.add(30);
list.add(70);
list.add(50);
list.add(60);
list.add(40);
Comparator<Integer> cmp=new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
// TODO Auto-generated method stub
int pos=0;
if(pos%2==0){
if(o1<o2){
return 1;
}
}
if(pos%2!=0){
if(o1>o2){
return -1;
}
}
pos++;
}
}
};
Collections.sort(list, cmp);
for(int i=0;i<list.size();i++){
System.out.println(list);
}
}
}
收到错误:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
This method must return a result of type int
at Arraylist1$1.compare(Arraylist1.java:51)
at Arraylist1$1.compare(Arraylist1.java:1)
at java.util.TimSort.countRunAndMakeAscending(TimSort.java:324)
at java.util.TimSort.sort(TimSort.java:189)
at java.util.TimSort.sort(TimSort.java:173)
at java.util.Arrays.sort(Arrays.java:659)
at java.util.Collections.sort(Collections.java:217)
at Arraylist1.main(Arraylist1.java:67)
我没有明白为什么我会收到此错误,我想这会导致隔离专区需要返回类型,但在我的情况下,这里不能指定返回类型。
答案 0 :(得分:1)
您的代码无法遵守。为此,你在所有情况下都有比较器的返回值。
if (pos % 2 == 0) {
if (o1 < o2) {
return 1;
} else if (o1 > o2) {
return -1;
}
pos++;
TODO: defie return value here
} else { TODO: define return value here }
重要提示:您的变量pos将始终为0.因为它是方法变量,并且每次调用方法时都会创建它。如果只需要实时订购,可以将比较器定义为(按降序排列)
return o2.compareTo(o1);
按升序排列
return o1.compareTo(o2);
答案 1 :(得分:0)
您的错误与比较器/集合无关,甚至与Java无关。 在编程中,函数必须返回任何输入的返回值。
对于compare
。
pos%2 != 0
函数不会返回任何内容
答案 2 :(得分:0)
自定义比较器cmp
刚刚被分配了按降序对list
进行排序的任务
Comparator<Integer> cmp = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
if (o1 < o2) {
return 1;
} else {
return -1;
}
}
};
Collections.sort(list, cmp);
输出:70 60 50 40 30 20
然后调用方法modifyList
以满足最大和最小要求。在此,我创建了另一个List<Integer>
,它将从上面的输出列表中选择元素并以1st max, 1st min, 2nd max, 2nd min ... so on...
顺序
public static List<Integer> modifyList(List<Integer> list) {
List<Integer> result = new ArrayList<>(list.size());
int i = 0, j = list.size() - 1;
int r = 0;
while (r < list.size()) {
result.add(r++, list.get(i++));
if (i < j)
result.add(r++, list.get(j--));
}
return result;
}
只需将元素从正面和背面填充到结果列表中即可。
最终输出