(JAVA)用TreeSet集合存储学生类对象并按照年龄排序,代码及异常分析 |
您所在的位置:网站首页 › bts成员年龄大小排序 › (JAVA)用TreeSet集合存储学生类对象并按照年龄排序,代码及异常分析 |
(JAVA)用TreeSet集合存储学生类对象并按照年龄排序,代码及异常分析
1.题目要求2.代码一3.异常4.代码修改后5.程序运行结果
1.题目要求
1.用TreeSet存储学生对象,并遍历,创建集合使用无参构造; 2.按照年龄从小到大排序,年龄相同时,按照姓名的字母排序 。 2.代码一我们先尝试实现遍历功能,假设写出下列代码: (1)构造学生类 //创建学生类 public class Stu { private String name; private int age; public Stu() { } public Stu(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }(2)创建TreeSet集合,尝试存储、遍历: public class TreeSetDemo2 { public static void main(String[] args) { //创建集合对象 TreeSet treeSet = new TreeSet(); //创建学生对象 Stu s1 = new Stu("ZhangSan",18); Stu s2 = new Stu("LiSi",19); Stu s3 = new Stu("WangWu",20); treeSet.add(s1); treeSet.add(s2); treeSet.add(s3); //增强for遍历 for(Stu s:treeSet){ System.out.println(s.getName()+" , "+s.getAge()); } } } 3.异常运行后发现程序有如下异常: Exception in thread “main” java.lang.ClassCastException: class TreeSet.Stu cannot be cast to class java.lang.Comparable (TreeSet.Stu is in unnamed module of loader ‘app’; java.lang.Comparable is in module java.base of loader ‘bootstrap’) at java.base/java.util.TreeMap.compare(TreeMap.java:1291) at java.base/java.util.TreeMap.put(TreeMap.java:536) at java.base/java.util.TreeSet.add(TreeSet.java:255) at TreeSet.TreeSetDemo2.main(TreeSetDemo2.java:17) 这里的异常是ClassCastException,原因是class TreeSet.Stu cannot be cast to class java.lang.Comparable,去帮助文档中查询Comparable,开始有这样一句话 修改后Stu如下: public class Stu implements Comparable { private String name; private int age; public Stu() { } public Stu(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public int compareTo(Stu s) { int num = this.age - s.age; //本次输入的年龄与上次的年龄之差 int num2 = num == 0 ? this.name.compareTo(s.name) : num; // 若num为0,则意味着年龄相同,那么就要比较姓名的首字母; //若num不为0,则num2等于num,返回的就是年龄差,若为正就是从小到大排序。 return num2; } }测试主程序也稍作修改,如下所示: /*要求: 1.用TreeSet存储学生对象,并遍历,创建集合使用无参构造 2.按照年龄从小到大排序,年龄相同时,按照姓名的字母排序 */ public class TreeSetDemo2 { public static void main(String[] args) { //创建集合对象 TreeSet treeSet = new TreeSet(); //创建学生对象 Stu s1 = new Stu("ZhangSan",18); Stu s2 = new Stu("LiSi",19); Stu s3 = new Stu("WangWu",20); Stu s4 = new Stu("ZhaoLiu",18); treeSet.add(s1); treeSet.add(s2); treeSet.add(s3); treeSet.add(s4); //增强for遍历 for(Stu s:treeSet){ System.out.println(s.getName()+" , "+s.getAge()); } } } 5.程序运行结果
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |