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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© IT人 中级黑马   /  2013-12-25 21:29  /  1161 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package com.itheima;
import java.util.Iterator;
import java.util.TreeSet;

public class Test10 {

        public static void main(String[] args)throws NullPointerException{
                // TODO Auto-generated method stub
       TreeSet<Student> ts = new TreeSet<Student>();
       ts.add(new Test10().new Student("wangwu01", 60.5, 23        ));
       ts.add(new Test10().new Student("lisi06",90.3, 21));
       ts.add(new Test10().new Student("zhangsan01", 56.5, 21));
       ts.add(new Test10().new Student("zhangsan04", 80.5, 20));
       ts.add(new Test10().new Student("wangwu05", 70.5, 19));
      
       Iterator<Student> it = ts.iterator();
       while(it.hasNext()){
               Student s = (Student)it.next();
               System.out.println("学生:"+s.getName()+"成绩:"+s.getScore()+"年龄:"+s.getage());
       }
        }

       
        class Student implements Comparable<Object>
        {
                //定义学生具备的三个属性:姓名,分数和年龄
                private String name;
                private float score;
                private int age;
               
                //初始化学生的属性
                Student(String name,float score,int age){
                        this.name = name;
                        this.score = score;
                        this.age = age;
                }

                public Student(String name2, double d, int age2) {
                        // TODO Auto-generated constructor stub
                }

                //实现Comparable接口的方法compareTo
                @Override
                public int compareTo(Object obj) {
                        // TODO Auto-generated method stub
                        //根据需求根据学生的成绩进行排序
                        //判断传入的对象是否Student对象
                        if(!(obj instanceof Student))
                                //如果不是学生对象就抛出异常
                                throw new RuntimeException("非学生");
                        //对传入的对象就行强转
                        Student stu = (Student)obj;
                          //比较两个学生的成绩大小如果相同,在调用字符串的compareTo方法进行排序
                        if(this.score == stu.score){
                                 return this.name.compareTo(stu.name);
                          }
                         //分数如果不同,那就分数进行排序
                        if(this.score > stu.score){
                                return 1;
                        }
                        return -1;
                }
               
                //对外提供获得age属性的方法
                public int getage(){
                        return age;
                }
                //对外提供获得name的方法
                public String getName(){
                        return name;
                }
                //对外提供获得score的方法
                public float getScore(){
                        return score;
                }
        }
}
下边是eclipse的提示:Exception in thread "main" java.lang.NullPointerException
        at com.itheima.Test10$Student.compareTo(Test10.java:55)
        at java.util.TreeMap.compare(Unknown Source)
        at java.util.TreeMap.put(Unknown Source)
        at java.util.TreeSet.add(Unknown Source)
        at com.itheima.Test10.main(Test10.java:10)

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

3 个回复

倒序浏览
本帖最后由 小骗子 于 2013-12-25 22:18 编辑


               
                //初始化学生的属性
               Student(String name,float score,int age){
                        
               }


               //启动这个方法,貌似有小数点就默认是double类型了,上面那个方法根本就没用到

                public Student(String name, double d, int age2) {
                        // TODO Auto-generated constructor stub
                    this.name = name;
                    this.score = d;
                    this.age = age2;
                }




结果:

学生:zhangsan01成绩:56.5年龄:21
学生:wangwu01成绩:60.5年龄:23
学生:wangwu05成绩:70.5年龄:19
学生:zhangsan04成绩:80.5年龄:20
学生:lisi06成绩:90.3年龄:21

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
通过了!谢谢了!我还想我问一句,float的不行么。为啥???学生成绩是float也行呀啊!是不是eclipse的事??麻烦解答一下
回复 使用道具 举报
IT人 发表于 2013-12-26 09:44
通过了!谢谢了!我还想我问一句,float的不行么。为啥???学生成绩是float也行呀啊!是不是eclipse的事 ...

存放float值的时候要加f。
如:
float f = 0.02f;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马