黑马程序员技术交流社区
标题:
异常问题
[打印本页]
作者:
想进黑马培训
时间:
2013-8-13 08:48
标题:
异常问题
下面这段代码 报了一个异常 我该怎么解决呢?xception in thread "main" java.lang.ClassCastException: com.itheima.Student cannot be cast to java.lang.Comparable
package com.itheima;
import java.util.Iterator;
import java.util.TreeSet;
class Student {
static String name;
static int age;
static int score;
Student(String name, int age, int score) {
Student.name = name;
Student.age = age;
Student.score = score;
}
}
public class Test10 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Student stu1 = new Student("wangda", 21, 98);
Student stu2 = new Student("liuer", 25, 95);
Student stu3 = new Student("zhangsa", 29, 89);
Student stu4 = new Student("lisi", 25, 92);
Student stu5 = new Student("zhaowu", 43, 93);
TreeSet<Student> st = new TreeSet<Student>();
st.add(stu1);
st.add(stu2);
st.add(stu3);
st.add(stu4);
st.add(stu5);
Iterator<Student> it = st.iterator();
while (it.hasNext()) {
System.out.println(it.hasNext());
}
}
}
作者:
狐灵
时间:
2013-8-13 09:11
本帖最后由 狐灵 于 2013-8-13 09:12 编辑
你把 Student类实现Comparable<E>这个接口,并覆写public int compareTo(E e)这个方法,这样就不会报类型转换异常了,然后你再自己跑跑,看看能不能得出你想要的结果。
代码如下
package com.itheima;
import java.util.Iterator;
import java.util.TreeSet;
class Student implements Comparable<Student> {
static String name;
static int age;
static int score;
Student(String name, int age, int score) {
Student.name = name;
Student.age = age;
Student.score = score;
}
@Override
public int compareTo(Student stu) {
// 这里需要你自己添加具体怎么比较对象
return 0;
}
}
public class Test10 {
public static void main(String[] args) {
Student stu1 = new Student("wangda", 21, 98);
Student stu2 = new Student("liuer", 25, 95);
Student stu3 = new Student("zhangsa", 29, 89);
Student stu4 = new Student("lisi", 25, 92);
Student stu5 = new Student("zhaowu", 43, 93);
TreeSet<Student> st = new TreeSet<Student>();
st.add(stu1);
st.add(stu2);
st.add(stu3);
st.add(stu4);
st.add(stu5);
Iterator<Student> it = st.iterator();
while (it.hasNext()) {
System.out.println(it.hasNext());
}
}
}
复制代码
作者:
想进黑马培训
时间:
2013-8-13 09:17
显示的是布尔类型的值 而且还是死循环。。。无限真
作者:
想进黑马培训
时间:
2013-8-13 09:17
哦 看错了!不好意思 谢谢哈
作者:
狐灵
时间:
2013-8-13 12:15
本帖最后由 狐灵 于 2013-8-13 12:28 编辑
输出true是因为
while (it.hasNext()) {
System.out.println(it.hasNext());
}
这个地方直接把it.hasNext())输出了。
我贴出的代码是不完整的。
作者:
sergio
时间:
2013-8-13 15:28
Sudent类要实现Compareable或者Compareator接口。然后去实现各自接口中的方法
Comparable和 Comparator的区别?
一个类实现了Camparable 接口则表明这个类的对象之间是可以相互比较的,这个类对象组成的集合就可以直接使用sort 方法排序。Comparator 可以看成一种算法的实现,将算法和数据分离,Comparator 也可以在下面两种环境下使用:
1、类的没有考虑到比较问题而没有实现Comparable,可以通过Comparator 来实现排序而不必改变对象本身。
2、可以使用多种排序标准,比如升序、降序等。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2