今天我们来说说另外一个关于set集合的练习,上需求:键盘录入学生信息(姓名、语文成绩、数学成绩、外语成绩),输入“exit”结束输入,然后按照总分进行排序,输出到控制台。(录入学生信息格式【张三 92 88 99】)
告诉你需求了,那我们来分析一下吧,我们要做哪些事:
1.首先我们创建一个Student类,添加姓名、语文成绩、数学成绩、英语成绩以及总分属性;
上代码:
然后Alt+Shift+S选择生成构造方法和ToString()方法:
注意:生成构造方法的时候不要选择sum,生成toString()方法时只选择name和sum就行了, 然后就出现了这些代码:
2.创建一个Set集合来存储学生信息,随后监听用户输入内容,然后判断用户是否输入为“exit”,是则退出循环,否则拆分该字符串,拆分后存到Set集合,最后遍历学生信息;
代码:
哈哈哈哈!写完一大半了,就差排序了哦!让我们先测试一下,嘿嘿嘿嘿:
输入【张三 92 88 99】试一下:
Oh,No!见红了!“java.lang.ClassCastException”类型转换异常?Excuse me???
我们再往后看看,它说:“setDemo.Student cannot be cast to java.lang.Comparable”,就是说Student类不能被投射到比较器,不能投射?那我就给你加一个比较器!
可是...可是,添加了还是不行啊,我们把鼠标移动到Student上看看,出现“Add unimplemented methods”,意思是添加未实现的方法,好,那就再给你加一个!点击之后出现了这段代码:
上文说过,这个比较器默认“return 0;”,“return 0;”则代表只返回一个数;而“return 正数;”则代表正序输出;“return 负数;”则代表倒序输出。那么这里呢,我们就“return o.sum - this.sum;”,这样,解决刚才异常的同时,我们还完成了排序,真是棒棒哒!
这回我们再来测试一下,输出结果如下:
细心的朋友问了,要是我不小心把数据格式输错咋办?好,那我们就来试试输入格式错误的情况:
又见红了!!!好气哦!!!
怎么办?这里我们用一个try...catch就好啦,代码:
这下应该没问题了,我们再来测试一下:
OK!大功告成!上完整代码:
Demo类:
Student类:
结语:以上就是Set集合练习(2)的全部内容,有说的不对的、不专业的地方还请大佬们多多为小弟指点,下次更新不见不散!