黑马程序员技术交流社区
标题:
代码不知道哪里错了
[打印本页]
作者:
闲人
时间:
2014-4-4 13:09
标题:
代码不知道哪里错了
本帖最后由 闲人 于 2014-4-4 13:19 编辑
import java.util.*;
public class CollectionsDemo
{
public static void main(String[] args)
{
sortDemo();
}
public static void sortDemo(){
List<String> list = new ArrayList<String>();
list.add("abcd");
list.add("aaa");
list.add("z");
list.add("kkkk");
list.add("qq");
list.add("ss");
list.add("z");
sop(list);
Collections.sort(list);//自然排序
sop(list);
//下面的那条好像不执行的样子
Collections.sort(list,new StrLenComparator());//按长度排序
sop(list);
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
class StrLenComparator implements Comparator<String>
{
public int compare(String s1,String s2){
if(s1.length()>s2.length())
return 1;
if(s2.length()<s2.length())
return -1;
return s1.compareTo(s2);
}
}
复制代码
执行结果是:
[abcd, aaa, z, kkkk, qq, ss, z]
[aaa, abcd, kkkk, qq, ss, z, z]
[aaa, abcd, kkkk, qq, ss, z, z]
复制代码
问题:代码编译通过,但是就是不按照我编的方法进行排序,找了半天,找不出问题了,帮我看看,求指点
作者:
anqi
时间:
2014-4-4 13:18
本帖最后由 anqi 于 2014-4-4 13:22 编辑
有打印结果但是 结果的顺序不对,那肯定是代码执行到了,但执行错误。所以分析比较器的语句
你的比较器里面的方法
if(s2.length()<s2.length()) //两个s2进行了比较,无效语句。
return -1;
作者:
闲人
时间:
2014-4-4 13:19
anqi 发表于 2014-4-4 13:18
肯定写错了啊 你的比较器里面的方法
if(s2.length()
我晕,脑袋懵了,看了好多遍,愣是没看出来,谢谢了
作者:
osully
时间:
2014-4-4 13:20
建议你比较器这么写 比较直观
class StrLenComparator implements Comparator<String> {
@Override
public int compare(String s1, String s2) {
if(s1.length()==s2.length())
return s1.compareTo(s2);
return new Integer(s1.length()).compareTo(new Integer(s2.length()));
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2