黑马程序员技术交流社区

标题: ArrayList练习2去除相同的对象中的问题 [打印本页]

作者: kangxiaoning    时间: 2013-9-26 10:30
标题: ArrayList练习2去除相同的对象中的问题
为什么注释处会报错?
package Collection;

import java.util.ArrayList;
import java.util.Iterator;

class Person
{
        private String name;
        private int age;
        Person(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;
        }
        public boolean equals(Object obj)
        {
                if( (obj instanceof Person));
                        return false;
               
                Person p = (Person)obj;//为什么这里会报错,提示删除。而且换了别的判断方法也不能实现删除相同对象的效果?
                return this.name.equals(p.name) && this.age==p.age;
               
               
        }
       
}

public class SingleElementArrayList02
{
        public static void main(String[] args)
        {
                ArrayList al = new ArrayList();
                al.add( new Person("zhangsan" , 23) );
                al.add( new Person("lisi" , 25) );
                al.add( new Person("wangwu" , 27) );
                al.add( new Person("zhangsan" , 23) );
                al.add( new Person("wangwu" , 27) );
                al.add( new Person("zhangsan" , 23) );
                al = SingleElement(al);
                Iterator it = al.iterator();
                while( it.hasNext())
                {
                        Person p = (Person)it.next();
                        sop("name:" + p.getName()+"   "+"age:"+ p.getAge());
                }
               
               
        }
        public static ArrayList SingleElement(ArrayList al)
        {
                ArrayList al1 = new ArrayList();
                for(Iterator it = al.iterator(); it.hasNext();)
                {
                        if( !al1.contains(it.next()))
                        {
                                al1.add(it.next());
                        }
                }
               
                return al;
        }
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }
}


作者: long362144768    时间: 2013-9-26 11:52
C:\Documents and Settings\Administrator\桌面
package NoMainText;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

class Person
{
        private String name;
        private int age;
        
        Person(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;
        }
        public boolean equals(Object obj)
        {
                if( !(obj instanceof Person))
                        return false;//为什么这里会报错,提示删除。而且换了别的判断方法也不能实现删除相同对象的效果?
                Person p = (Person)obj;
                    return this.name.equals(p.name) && this.age == p.age;
        }
        
}

public class SingleElementArrayList02
{
        public static void main(String[] args)
        {
                List<Person> al = new ArrayList<Person>();
                al.add( new Person("zhangsan" , 23) );
                al.add( new Person("lisi" , 25) );
                al.add( new Person("wangwu" , 27) );
                al.add( new Person("zhangsan" , 23) );
                al.add( new Person("wangwu" , 27) );
                al.add( new Person("zhangsan" , 23) );
                al = SingleElement(al);
                Iterator<Person> it = al.iterator();
                while( it.hasNext())
                {
                        Person p = (Person)it.next();
                        sop("name:" + p.getName()+"   "+"age:"+ p.getAge());
                }
               
               
        }
        public static List<Person> SingleElement(List<Person> al)
        {
                List<Person> al1 = new ArrayList<Person>();
                for(Person it : al)
                {
                        if( !al1.contains(it))
                        {
                                al1.add(it);
                        }
                }
                return al1;
        }
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }
}
需要用到泛型,我帮你调了一下,可以运行了,你看看我的结果


作者: long362144768    时间: 2013-9-26 11:54
C:\Documents and Settings\Administrator\桌面\QQ图片20130926115126.jpg
刚才没有加上,这次加上运行结果
作者: 黄文伯    时间: 2013-9-26 15:59
建议将代码放在代码块中,便于大家阅读!
作者: kangxiaoning    时间: 2013-9-27 07:13
long362144768 发表于 2013-9-26 11:54
刚才没有加上,这次加上运行结果

这个问题的原因是什么呢,用了泛型不就是只能接收Person的对象吗,那么Object instantsof Person不就没意义了么?

作者: Angel♥儱唲    时间: 2013-9-27 10:05
楼主,我没有进行代码测试运行,不知道我的答案是不是你想要,你在equals里面判断的时候if( (obj instanceof Person));这里少了一个非!运算符,应该是if(!(obj instanceof Person));不然你的结果会把所有传进来的是Person的对象都会返回一个false。我想应该就是这里的原因吧




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2