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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

为什么注释处会报错?
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);
        }
}

5 个回复

正序浏览
楼主,我没有进行代码测试运行,不知道我的答案是不是你想要,你在equals里面判断的时候if( (obj instanceof Person));这里少了一个非!运算符,应该是if(!(obj instanceof Person));不然你的结果会把所有传进来的是Person的对象都会返回一个false。我想应该就是这里的原因吧
回复 使用道具 举报
long362144768 发表于 2013-9-26 11:54
刚才没有加上,这次加上运行结果

这个问题的原因是什么呢,用了泛型不就是只能接收Person的对象吗,那么Object instantsof Person不就没意义了么?
回复 使用道具 举报
建议将代码放在代码块中,便于大家阅读!
回复 使用道具 举报
C:\Documents and Settings\Administrator\桌面\QQ图片20130926115126.jpg
刚才没有加上,这次加上运行结果
回复 使用道具 举报
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);
        }
}
需要用到泛型,我帮你调了一下,可以运行了,你看看我的结果

评分

参与人数 1技术分 +2 收起 理由
黄文伯 + 2 赞一个!

查看全部评分

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