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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 何明辉 于 2012-9-9 20:32 编辑

import java.util.*;
class Person implements Comparable
{
private String name;
private int age;
Person(String name,int age)
{
   this.name=name;
   this.age=age;
}
public int compareTo(Person p)
{
  if(this.age>p.age) return 1;
  if(this.age==p.age) return 0;
  else return -1;
}
public boolean equals(Object obj)
{
  Person p=(Person)obj;
  if(this.name.equals(p.name)&&this.age==p.age)return true;
  else return false;
}
}
clss PersonDemo
{
public static void main(String[] args)
{
  Set<Person> st=new TreeSet<Person>();
  st.add(new Person("张三",25));
  st.add(new Person("李四",26));
  st.add(new Person("孙八",27));
  st.add(new Person("赵一",21));
  st.add(new Person("王二",22));
  st.add(new Person("刘三",23));
     System.out.println(st);
}
}
不知道程序错哪儿了,请大家帮我看看,谢谢!

评分

参与人数 1技术分 +1 收起 理由
田建 + 1

查看全部评分

4 个回复

正序浏览
楼上回答的都对,
在实现时加泛型,comparable<Person>  也可以
回复 使用道具 举报
问题很简单,给你改了一下。结果是输出哈希值,要输出别的还是按照楼主自己的意思做吧

import java.util.*;

class Person implements Comparable {
        private String name;
        private int age;

        Person(String name, int age) {
                this.name = name;
                this.age = age;
        }

        public int compareTo(Object o) {//这里传入的参数应该是Object,你原来是Person,这个是重写Comparable接口的方法,要重写就要和原方法一样,否则就不是覆写
                Person p = (Person)o;//既然传入的是Object,使用的是子类Person这里就要向下转型,原因你懂得
                if (this.age > p.age)
                        return 1;
                if (this.age == p.age)
                        return 0;
                else
                        return -1;
        }

        public boolean equals(Object obj) {
                Person p = (Person) obj;
                if (this.name.equals(p.name) && this.age == p.age)
                        return true;
                else
                        return false;
        }
}

public class smallT {
        public static void main(String[] args) {
                Set<Person> st = new TreeSet<Person>();
                st.add(new Person("张三", 25));
                st.add(new Person("李四", 26));
                st.add(new Person("孙八", 27));
                st.add(new Person("赵一", 21));
                st.add(new Person("王二", 22));
                st.add(new Person("刘三", 23));
                System.out.println(st);
        }
}








回复 使用道具 举报
你选择的是让承实现Comparable接口。compareTo方法 return 0 就表示元素相同。
public int compareTo(Person p)
{
  if(this.age>p.age) return 1;
  if(this.age==p.age) return 0;//改为  return this.getName().compareTo(p.getName());  
else return -1;
}
此方法比较元素只以age来判断。就是说当age相同时2个Person 就是相同,显然不对。
应该在判断age之后再判断 name的值。
还有就是,此题中你的equals方法并不会执行。他是当你实现Comparator接口时要的,还要加上hasCode方法。

评分

参与人数 1技术分 +1 收起 理由
田建 + 1

查看全部评分

回复 使用道具 举报
clss PersonDemo//class PersonDemo{
public static void main(String[] args)
{
  Set<Person> st=new TreeSet<Person>();
  st.add(new Person("张三",25));
  st.add(new Person("李四",26));
  st.add(new Person("孙八",27));
  st.add(new Person("赵一",21));
  st.add(new Person("王二",22));
  st.add(new Person("刘三",23));
     System.out.println(st);
}
}

评分

参与人数 1技术分 +1 收起 理由
田建 + 1 鼓励一下!

查看全部评分

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