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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 徐升2013 于 2013-4-4 10:27 编辑

代码很多:我标记颜色的部分看下就可以了,代码为了实现的目的是去掉类集中的重复元素,但是始终达不到自己想要的效果,也没发现错在哪里了,求助



代码如下:
public class Test1 {
        public static void main(String[] args) {
                ArrayList per = new ArrayList();
                per.add(new Person("张三01", 20));
                per.add(new Person("张三02", 21));
                per.add(new Person("张三01", 20));
                per.add(new Person("张三03", 22));
                per.add(new Person("张三03", 22));
                per.add(new Person("张三01", 20));
                Person p = new Person("王五",20);
                per.add(p);
                                
                sop(per);
                per = singleElement(per);

                sop(per);

        }

        public static void sop(Collection co) {
                Iterator it = co.iterator();
                Person p;
                if (it.hasNext()) {
                        p = (Person) it.next();
                        System.out.print("姓名:" + p.getName() + "----->年龄:" + p.getAge());
                }
        }

        public static ArrayList singleElement(Collection arr) {
                ArrayList temp = new ArrayList();
                Iterator it = arr.iterator();
               
                while (it.hasNext()) {
                        Person p = (Person) it.next();


                        if (!temp.contains(p)){
                                temp.add(p);
                                
                        }
                }
                return temp;
        }

}

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 int getAge() {
                return age;
        }

        public boolean equals(Object obj) {
                try {
                        if (obj instanceof Person) {
                                Person p = (Person) obj;
                                if (this.name.equals(p.getName()) && this.age == p.getAge())
                                        return true;
                        }
                        return false;
                } catch (Exception e) {
                        System.out.println("输出参数有误");
                        throw new RuntimeException();
                }
        }
}

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

7 个回复

正序浏览
徐升2013 发表于 2013-4-3 22:56
辛苦了 真心感谢,主要是我没写重复的元素,纠结了2个多小时脑子迷糊了。 呵呵已经解决问题了~~
这些长的 ...

不客气,大家共同学习共同进步
回复 使用道具 举报
朱盛文 发表于 2013-4-3 22:53
好吧,我再把程序给你稍微修改一下,你就可以看清楚了,程序我是运行过的,没问题 ...

辛苦了 真心感谢,主要是我没写重复的元素,纠结了2个多小时脑子迷糊了。 呵呵已经解决问题了~~
这些长的代码你看的也够辛苦了。感谢一个 :handshake
回复 使用道具 举报
徐升2013 发表于 2013-4-3 22:47
改成while了还是不行啊

好吧,我再把程序给你稍微修改一下,你就可以看清楚了,程序我是运行过的,没问题

  1. import java.util.*;      //这里一定要导包,不知道楼主有没有导包,当然这里只是一个小问题。

  2. public class Test1 {
  3.         public static void main(String[] args) {
  4.                 ArrayList per = new ArrayList();
  5.                 per.add(new Person("张三01", 20));
  6.                 per.add(new Person("张三02", 21));
  7.                 per.add(new Person("张三01", 20));
  8.                 per.add(new Person("张三03", 22));
  9.                 per.add(new Person("张三03", 22));
  10.                 per.add(new Person("张三01", 20));
  11.                 Person p = new Person("王五",20);
  12.                 per.add(p);
  13.                                 
  14.                 sop(per);
  15.                 System.out.println("*******************************");//这里加上这么一句,就能辨别去除重复元素前和去除后的打印
  16.                 per = singleElement(per);

  17.                 sop(per);

  18.         }

  19.         public static void sop(Collection co) {
  20.                 Iterator it = co.iterator();
  21.                 Person p;
  22.                 if (it.hasNext()) {           //主要问题是这里,这里用 if 的话只是进行一次判断,而不是循环,所以这里的 if 改成 while 就可以了
  23.                         p = (Person) it.next();
  24.                         System.out.println("姓名:" + p.getName() + "----->年龄:" + p.getAge());//这里最好将print改成prinltln ,这样就可以看清楚些
  25.                 }
  26.         }

  27.         public static ArrayList singleElement(Collection arr) {
  28.                 ArrayList temp = new ArrayList();
  29.                 Iterator it = arr.iterator();
  30.                
  31.                 while (it.hasNext()) {
  32.                         Person p = (Person) it.next();


  33.                         if (!temp.contains(p)){
  34.                                 temp.add(p);
  35.                                 
  36.                         }
  37.                 }
  38.                 return temp;
  39.         }

  40. }

  41. class Person {
  42.         private String name;
  43.         private int age;

  44.         Person(String name, int age) {
  45.                 this.name = name;
  46.                 this.age = age;
  47.         }

  48.         public String getName() {
  49.                 return name;
  50.         }

  51.         public int getAge() {
  52.                 return age;
  53.         }

  54.         public boolean equals(Object obj) {
  55.                 try {
  56.                         if (obj instanceof Person) {
  57.                                 Person p = (Person) obj;
  58.                                 if (this.name.equals(p.getName()) && this.age == p.getAge())
  59.                                         return true;
  60.                         }
  61.                         return false;
  62.                 } catch (Exception e) {
  63.                         System.out.println("输出参数有误");
  64.                         throw new RuntimeException();
  65.                 }
  66.         }
  67. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1 赞一个!

查看全部评分

回复 使用道具 举报
朱盛文 发表于 2013-4-3 22:45

哦搞定了。。多谢。我都纠结坏了
回复 使用道具 举报
朱盛文 发表于 2013-4-3 22:45

改成while了还是不行啊
回复 使用道具 举报

  1. import java.util.*;      //这里一定要导包,不知道楼主有没有导包,当然这里只是一个小问题。

  2. public class Test1 {
  3.         public static void main(String[] args) {
  4.                 ArrayList per = new ArrayList();
  5.                 per.add(new Person("张三01", 20));
  6.                 per.add(new Person("张三02", 21));
  7.                 per.add(new Person("张三01", 20));
  8.                 per.add(new Person("张三03", 22));
  9.                 per.add(new Person("张三03", 22));
  10.                 per.add(new Person("张三01", 20));
  11.                 Person p = new Person("王五",20);
  12.                 per.add(p);
  13.                                 
  14.                 sop(per);
  15.                 per = singleElement(per);

  16.                 sop(per);

  17.         }

  18.         public static void sop(Collection co) {
  19.                 Iterator it = co.iterator();
  20.                 Person p;
  21.                 if (it.hasNext()) {           //主要问题是这里,这里用 if 的话只是进行一次判断,而不是循环,所以这里的 if 改成 while 就可以了
  22.                         p = (Person) it.next();
  23.                         System.out.print("姓名:" + p.getName() + "----->年龄:" + p.getAge());
  24.                 }
  25.         }

  26.         public static ArrayList singleElement(Collection arr) {
  27.                 ArrayList temp = new ArrayList();
  28.                 Iterator it = arr.iterator();
  29.                
  30.                 while (it.hasNext()) {
  31.                         Person p = (Person) it.next();


  32.                         if (!temp.contains(p)){
  33.                                 temp.add(p);
  34.                                 
  35.                         }
  36.                 }
  37.                 return temp;
  38.         }

  39. }

  40. class Person {
  41.         private String name;
  42.         private int age;

  43.         Person(String name, int age) {
  44.                 this.name = name;
  45.                 this.age = age;
  46.         }

  47.         public String getName() {
  48.                 return name;
  49.         }

  50.         public int getAge() {
  51.                 return age;
  52.         }

  53.         public boolean equals(Object obj) {
  54.                 try {
  55.                         if (obj instanceof Person) {
  56.                                 Person p = (Person) obj;
  57.                                 if (this.name.equals(p.getName()) && this.age == p.getAge())
  58.                                         return true;
  59.                         }
  60.                         return false;
  61.                 } catch (Exception e) {
  62.                         System.out.println("输出参数有误");
  63.                         throw new RuntimeException();
  64.                 }
  65.         }
  66. }
复制代码
回复 使用道具 举报
在线等答案啊,崩溃了这个不研究明白就不可能睡觉了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马