黑马程序员技术交流社区

标题: 不知道哪里错了,得不出想要的结果,麻烦帮忙改一下! [打印本页]

作者: 葛奎    时间: 2012-7-5 12:07
标题: 不知道哪里错了,得不出想要的结果,麻烦帮忙改一下!
本帖最后由 葛奎 于 2012-7-5 14:53 编辑

/**
将自定义的对象作为元素存入ArrayList集合中,并去除重复元素
比如:存人对象.把同名同年龄的视为同一对象,是重复元素
*/
import java.util.*;
class  ArrayListTest3
{
        public static void main(String[] args)
        {
                Person p0=new Person("gekui",22);
                Person p1=new Person("gekui",22);
                Person p2=new Person("gekui",22);
                Person p3=new Person("gekui",23);
                Person p4=new Person("wf",22);
                Person p5=new Person("gekui",22);
               
                ArrayList al=new ArrayList();
                al.add(p0);
                al.add(p1);
                al.add(p2);
                al.add(p3);
                al.add(p4);
                al.add(p5);
               
                sop(removeSameP(al));
        }
        public static ArrayList removeSameP(ArrayList al)
        {
                ArrayList newAl=new ArrayList();
                newAl.add(al.get(0));
                for(Iterator it=al.iterator();it.hasNext();)
                {
                        Object obj=it.next();
                        Person p=(Person)obj;

                        for(ListIterator newIt=newAl.listIterator();newIt.hasNext();)
                        {
                                Object newObj=newIt.next();
                                Person newP=(Person)newObj;
                                if(p.getName()!=newP.getName()||p.getAge()!=newP.getAge())
                                        newIt.add(obj);
                        }
                }
                return newAl;
        }
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }
}
class Person
{
        private String name;
        private int age;
        Person(String name,int age)
        {
                this.name=name;
                this.age=age;
        }
        public void setAge(int age)
        {
                this.age=age;
        }
        public void setName(String name)
        {
                this.name=name;
        }
        public int getAge()
        {
                return this.age;
        }
        public String getName()
        {
                return this.name;
        }

}

作者: 刘勇军    时间: 2012-7-5 13:18
本帖最后由 刘勇军 于 2012-7-5 13:20 编辑

打印结果是Person加对象的地址值,如果想要打印name加age的话,在定义Person类时,要复写从Object类中继承的toString方法,

试试在person类中加
public String toString()
{
        return name+"::"+age;
}

作者: 万宝东    时间: 2012-7-5 13:22
class Person
{
         private String name;
         private int age;
         Person(String name,int age)
         {
                 this.name=name;
                 this.age=age;
         }
         public void setAge(int age)
         {
                 this.age=age;
         }
         public void setName(String name)
         {
                 this.name=name;
         }
         public int getAge()
         {
                 return this.age;
         }
         public String getName()
         {
                 return this.name;
         }
      
         public String toString(){
        return name+"::::"+age;
         }

}
打印的结果是哈希码,要想看到嫩看懂的结果,你的Person类要重写toString方法。
作者: 葛奎    时间: 2012-7-5 13:22
刘勇军 发表于 2012-7-5 13:18
打印结果是Person加对象的地址值,如果想要打印name加age的话,在定义Person类时,在复写里面的toString方 ...

亲..你没有理解我的意思啊  我的意思是把一个集合中的重复的元素删除
定义一个新的集合,把重复集合中的元素往里面加   判断如果新集合中已经存在了 就不需要再加了
结果是打印出来
Person p0=new Person("gekui",22);
Person p3=new Person("gekui",23);
Person p4=new Person("wf",22);它们三的地址值
作者: 刘勇军    时间: 2012-7-5 13:33
定义类的时候要复写toString方法,做比较需要复写equals方法,你用!=只是比较的对象的地址值而已,因为Person是你NEW出来的,虽然内容相同,但都新开辟内存地址。复写equals方法来比较里面内容
作者: 李伟    时间: 2012-7-5 14:04
import java.util.*;
class  ArrayListTest3
{
        public static void main(String[] args)
        {
                Person p0=new Person("gekui",22);
                Person p1=new Person("gekui",22);
                Person p2=new Person("gekui",22);
                Person p3=new Person("gekui",23);
                Person p4=new Person("wf",22);
                Person p5=new Person("gekui",22);
               
                ArrayList al=new ArrayList();
                al.add(p0);
                al.add(p1);
                al.add(p2);
                al.add(p3);
                al.add(p4);
                al.add(p5);
                sop(removeSameP(al));
        }
        public static ArrayList removeSameP(ArrayList al)
        {
                        for(int i=0;i<al.size();i++)//用双重循环遍历的方式删除相同元素
                        {
                                for(int j=i+1;j<al.size();j++)
                                {
                                        Person p=(Person)al.get(i);
                                        Person pp=(Person)al.get(j);
                                        if((p.getName()==pp.getName())&&(p.getAge()==pp.getAge()))
                                                al.remove(j--);
                                }
                        }
                        return al;
               
        }
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }
}
class Person
{
        private String name;
        private int age;
        Person(String name,int age)
        {
                this.name=name;
                this.age=age;
        }
        public void setAge(int age)
        {
                this.age=age;
        }
        public void setName(String name)
        {
                this.name=name;
        }
        public int getAge()
        {
                return this.age;
        }
        public String getName()
        {
                return this.name;
        }
                public String toString()//复写toSting()       
        {
                        return name+","+age+" ";
                }

}

作者: 黑马振鹏    时间: 2012-7-5 14:13
本帖最后由 啸傲江湖007 于 2012-7-5 14:17 编辑

肯定是removeSameP()逻辑有问题,你的本意是 先给新的ArrayList一个初始值,然后双循环遍历,如果老的ArrayList中的元素对应的属性和新的ArrayList里的初始元素对应的属性不相同,就存入一个元素。这里我感觉这样比较是不是错了,完全可以把person当做一个整体进行比较,这里只是调用比较方法呢?
作者: 万宝东    时间: 2012-7-5 14:33
import java.util.*;
class  ArrayListTest3
{
         public static void main(String[] args)
        {
                 Person p0=new Person("gekui",22);
                 Person p1=new Person("gekui",22);
                 Person p2=new Person("gekui",22);
                 Person p3=new Person("gekui",23);
                 Person p4=new Person("wf",22);
                 Person p5=new Person("gekui",22);
                 
                ArrayList al=new ArrayList();
                 al.add(p0);
                 al.add(p1);
                 al.add(p2);
                 al.add(p3);
                 al.add(p4);
                 al.add(p5);
                 
                sop(removeSameP(al));
         }
         public static List removeSameP(ArrayList<Person> al) { //把方法体换一下
           ArrayList newAl = new ArrayList();
           HashMap<String,Person>  map=new HashMap<String,Person>();
           for (int i = 0; i < al.size(); i++) {
            Person p=map.get(al.get(i).getName()+al.get(i).getAge());
            if(p ==null){
               map.put(al.get(i).getName()+al.get(i).getAge(), al.get(i));
               newAl.add(al.get(i));
            }
           }
           return newAl;
           
        }

         public static void sop(Object obj)
         {
                 System.out.println(obj);
         }
}
class Person
{
         private String name;
         private int age;
         Person(String name,int age)
         {
                 this.name=name;
                 this.age=age;
         }
         public void setAge(int age)
         {
                 this.age=age;
         }
         public void setName(String name)
         {
                 this.name=name;
         }
         public int getAge()
         {
                 return this.age;
         }
         public String getName()
         {
                 return this.name;
         }

          public String toString()
        {
                                       return name+":"+age+;
                        }


}

作者: 葛奎    时间: 2012-7-5 14:53
谢谢亲们  我已经解决啦{:soso_e142:}
作者: 张华廷    时间: 2012-7-5 15:05
package day1.enumdemo;

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

public class EnumDemo1 {

                public static void main(String[] args)
    {
             Person p0=new Person("gekui",22);
             Person p1=new Person("gekui",22);
             Person p2=new Person("gekui",22);
             Person p3=new Person("gekui",23);
             Person p4=new Person("wf",22);
             Person p5=new Person("gekui",22);
            
            ArrayList al=new ArrayList();
             al.add(p0);
             al.add(p1);
             al.add(p2);
             al.add(p3);
             al.add(p4);
             al.add(p5);
            
            sop(removeSameP(al));
     }
     public static ArrayList removeSameP(ArrayList al)
     {
             ArrayList newAl=new ArrayList();
             newAl.add(al.get(0));
             for(Iterator it=al.iterator();it.hasNext();)
             {
                     Object obj=it.next();
                     Person p=(Person)obj;

                    for(ListIterator newIt=newAl.listIterator();newIt.hasNext();)
                     {
                             Object newObj=newIt.next();
                             Person newP=(Person)newObj;
                             if(p.getName()!=newP.getName()||p.getAge()!=newP.getAge())
                                     newIt.add(obj);
                     }
             }
             return newAl;
     }
     public static void sop(Object obj)
     {
             System.out.println(obj);
     }
}
class Person
{
     private String name;
     private int age;
     Person(String name,int age)
     {
             this.name=name;
             this.age=age;
     }
     public void setAge(int age)
     {
             this.age=age;
     }
     public void setName(String name)
     {
             this.name=name;
     }
     public int getAge()
     {
             return this.age;
     }
     public String getName()
     {
             return this.name;
     }
     public String toString(){
         return name+"::::"+age;//Person类要重写toString方法
          }


}
作者: 陆强强    时间: 2012-7-5 15:46
         
            sop(removeSameP(al));//不能直接打印集合。
        }
        public static ArrayList removeSameP(ArrayList al)
        {
                ArrayList newAl=new ArrayList();
                newAl.add(al.get(0));
                for(Iterator it=al.iterator();it.hasNext();)
                {
                        Object obj=it.next();
                        Person p=(Person)obj;

                        for(ListIterator newIt=newAl.listIterator();newIt.hasNext();)
                        {
                                Object newObj=newIt.next();
                                Person newP=(Person)newObj;
                                if(p.getName()!=newP.getName()||p.getAge()!=newP.getAge()));//如果我遍历到P和某个newp不一样就加进去,往下再有不一样还会加进集合  ,具体看图                                   
                                newIt.add(obj);               
                            }
                }
                return newAl;

未命名.JPG (52.42 KB, 下载次数: 53)

未命名.JPG

作者: 葛奎    时间: 2012-7-5 16:28
陆强强 发表于 2012-7-5 15:46
sop(removeSameP(al));//不能直接打印集合。
        }
        public static Arra ...

嗯 明白啦  谢谢你啊




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