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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 张文强 于 2012-6-3 07:48 编辑

/*
功能:存储人类对象 并去除重复元素
    按照同名年龄相同为同一元素
1.创建Person类
2.复写equals方法,对传入的元素判断
3.创建对象实例
4.取出元素
*/
import java.util.*;
class Person
{
        private String name;
        private int age;
        Person(String myName,int age)
        {
                this.name=name;
                this.age=age;
        }
        public boolean equals(Object obj)
        {
                if(!(obj instanceof Person))
                        return false;
                Person p = (Person)obj;
                return this.name.equals(p.name) && this.age==age;
        }
    public int myAge()
        {
                return age;
        }
        public String myName()
        {
                return name;
        }
}

public class PersonDemo
{
        public static void main(String args[])
        {
                ArrayList pr = new ArrayList();
                        pr.add(new Person("zhangsan1",51));
                        pr.add(new Person("zhangsan2",52));
                        pr.add(new Person("zhangsan3",53));
                        pr.add(new Person("zhangsan3",56));
                        pr.add(new Person("zhangsan3",53));
            pr.add(new Person("zhangsan4",54));
                        pr.add(new Person("zhangsan5",55));
                        //sop(pr);
                        pr=guolu(pr);
                        Iterator it = pr.iterator();
                        while(it.hasNext())                //打印过滤后的元素
                {
                                Person p = (Person)it.next();
                                sop(p.myName()+":::"+p.myAge());
                        }

        }

/*        public static ArrayList guolu(ArrayList al)//过滤重复元素;
        {
                ArrayList newal = new ArrayList();
                Iterator tt = al.iterator();
                while(tt.hasNext())
                {
                        Person p1 = (Person)tt.next();
                        if(!newal.contains(p1))
                                newal.add(p1);
                }
                return newal;
        }
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }
*/
public static ArrayList guolu(ArrayList al)
                {
                        ArrayList newa = new ArrayList();
                        Iterator tt = al.iterator();
                        while(tt.hasNext())
                        {
                          Person aa = (Person)tt.next();

                          if(!newa.contains(aa))
                                newa.add(aa);
                        }
                        return newa;
            }



        public static void sop(Object obj)
        {
                System.out.println(obj);
        }
}

5 个回复

倒序浏览
name属性的值都是空的,Person类里面包含所有属性的getter和setter方法,你好像没写setter方法
回复 使用道具 举报
楼主能把错误信息贴出来?  
回复 使用道具 举报
本帖最后由 杜俊彪 于 2012-6-2 21:13 编辑

我帮你改了下,你可试下,    不过,楼主你不必这么复杂地去去除那些相同 的对象;
  1. <blockquote>import java.util.*;
复制代码
回复 使用道具 举报
楼主之所以报 Exception in thread "main" java.lang.NullPointerException 异常,是因为在其构造方法中给name赋值时变量名写错。
  Person(String myName,int age)
         {
                 this.name=name;   此处应该为 this.name=myName
                 this.age=age;
         }

回复 使用道具 举报
这个问题已解决吗? return this.name.equals(p.name)中的p.name怎么可以直接调用?那还要myName干什么。注意p可是传入的对象!求解!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马