A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘泰 中级黑马   /  2012-3-11 09:41  /  1606 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class LT {

        public static void main(String[] args) {
                ArrayList  al=new ArrayList();
                for(int y=0;y<4;y++){
                        for(int i=2;i<=10;i++){
                                al.add(i);
                        }
                }
                for(int y=0;y<4;y++){
                        al.add('A');
                        al.add('J');
                        al.add('Q');
                        al.add('K');
                }
                al.add("大王");
                al.add("小王");
                Collections.shuffle(al);
                Iterator it=al.iterator();
                ArrayList a1=new ArrayList();
                ArrayList a2=new ArrayList();
                ArrayList a3=new ArrayList();
                while(it.hasNext()){
                        a1.add(it.next());
                        a2.add(it.next());
                        a3.add(it.next());
                }
//                Collections.sort(a1);
//                Collections.sort(a2);
//                Collections.sort(a3);
//                Collections.reverse(a1);
                System.out.println("第一家的牌"+a1);
                System.out.println("第一家的牌"+a2);
                System.out.println("第一家的牌"+a3);
        }

}
想问一下,问什么用collections 中的sort或者是reverse排序,问什么会报错呢?
   报错为:Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Character
        at java.lang.Character.compareTo(Character.java:101)
        at java.util.Arrays.mergeSort(Arrays.java:1144)
        at java.util.Arrays.mergeSort(Arrays.java:1156)
        at java.util.Arrays.mergeSort(Arrays.java:1155)
        at java.util.Arrays.sort(Arrays.java:1079)
        at java.util.Collections.sort(Collections.java:117)
        at text3.LT.main(LT.java:34)
是不是添加不同的类型不能排序呀?
   

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1

查看全部评分

6 个回复

倒序浏览
java.lang.Integer cannot be cast to java.lang.Character
就是类型的问题,字符和数字怎么能一起进行排序?
回复 使用道具 举报
本帖最后由 李明伟 于 2012-3-11 10:52 编辑

使用集合的时候,最好使用泛型,这样就可以确保你在集合中添加的数据是同一类型的。

你这段程序的问题是:将字符串,字符,整数加入了同一个集合中,所以排序比较时不能进行,会报错,
                while(it.hasNext()){
                        a1.add(it.next());
                        a2.add(it.next());
                        a3.add(it.next());
                }

上面这一小段代码中,你在while循环中使用了三个it.next(),但是如果你执行了 a1.add(it.next());后,集合中就没有数据了,这也是一个错误。

代码改正:

public class test {

        public static void main(String[] args) {
                ArrayList<String>  al=new ArrayList<String>();
                for(int y=0;y<4;y++){
                        for(int i=2;i<=10;i++){
                                al.add(i+"");//使i变成字符串
                        }
                }
                for(int y=0;y<4;y++){
                        al.add("A");
                        al.add("J");
                        al.add("Q");
                        al.add("K");
                }
                al.add("大王");
                al.add("小王");
                Collections.shuffle(al);
                Iterator it=al.iterator();
                ArrayList a1=new ArrayList();
                ArrayList a2=new ArrayList();
                ArrayList a3=new ArrayList();
                while(it.hasNext()){
                        a1.add(it.next());
                        a2.add(it.next());
                        a3.add(it.next());
                }
                Collections.sort(a1);            
                Collections.sort(a2);
               Collections.sort(a3);
                Collections.reverse(a1);
                System.out.println("第一家的牌"+a1);
                System.out.println("第一家的牌"+a2);
                System.out.println("第一家的牌"+a3);
        }

}

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1

查看全部评分

回复 使用道具 举报
李明伟 发表于 2012-3-11 10:00
使用集合的时候,最好使用泛型,这样就可以确保你在集合中添加的数据是同一类型的。

你这段程序的问题是: ...

可以可以打印的出来呀,不进行排序的话,结果就是

第一家的牌[J, 3, 2, K, 5, J, 2, 7, A, 8, 10, 10, 3, 7, 6, 4, 7, 4]
第一家的牌[A, 小王, 4, Q, 2, J, 8, J, K, 9, 3, 10, 5, 8, 9, Q, K, 3]
第一家的牌[Q, 10, 4, 6, Q, 8, 5, K, 9, 5, 大王, 6, A, 7, A, 2, 9, 6]
为什么?

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1

查看全部评分

回复 使用道具 举报
刘泰 发表于 2012-3-11 10:41
可以可以打印的出来呀,不进行排序的话,结果就是

第一家的牌[J, 3, 2, K, 5, J, 2, 7, A, 8, 10, 10, 3 ...

虽然可以打印出来,但是你的集合中有三种类型的数据,字符,字符串,int,调用sort时怎么比较排序啊!

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1

查看全部评分

回复 使用道具 举报
刘泰 发表于 2012-3-11 10:41
可以可以打印的出来呀,不进行排序的话,结果就是

第一家的牌[J, 3, 2, K, 5, J, 2, 7, A, 8, 10, 10, 3 ...

而且你这个是正好有54个数据  是3的倍数,正好用next去玩,不会出现刚才我说的那种情况吧
回复 使用道具 举报
public static <T extends Comparable<? super T>> void sort(List<T> list)
public static <T> void sort(List<T> list, Comparator<? super T> c)
这两种方法都可以用来排序,请仔细查看这两个方法所带参数,它是一个泛型对吧,它需要相同的数据类型才可排序,或是实现Comparator接口也可以


评分

参与人数 1技术分 +1 收起 理由
老罗 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马