黑马程序员技术交流社区

标题: 集合中的错误找不出来 [打印本页]

作者: ぺsimon☆    时间: 2013-4-24 22:01
标题: 集合中的错误找不出来
本帖最后由 ぺsimon☆ 于 2013-4-25 01:04 编辑
  1. /*
  2. 去除ArrayList集中的重复元素
  3. */
  4. import java.util.*;
  5. class ArrayListTest
  6. {
  7.         public static void main(String[] args)
  8.         {
  9.         ArrayList al=new ArrayList();  //定义一个集合al
  10.         al.add("java01");
  11.         al.add("java02");
  12.         al.add("java02");
  13.         al.add("java03");
  14.         al.add("java04");
  15.         al.add("java01");
  16.         System.out.println(al);
  17.         System.out.println(myGet(al));
  18.         }

  19.         public static ArrayList myGet(ArrayList al)
  20.         {
  21.         ArrayList newal=new ArrayList();  //定义一个新集合
  22.         Iterator it=newal.iterator();  //获取迭代器
  23.         while(it.hasNext())  //判断是否有下一个元素
  24.         {
  25.         Object obj=it.next(); //把获取到的元素的地址值赋给obj

  26.         ////判断新集合里没有obj元素,如果没有就把obj添加到新集合
  27.         if(!newal.contains(obj))
  28.         newal.add(obj);
  29.         }
  30.         return newal;  //返回新集合
  31.         }
  32. }
复制代码
问题;
为什么我在dos命令行里的输出结果是空呢?
运行结果

[java01, java02, java02, java03, java04, java01]
[]




作者: wangyougu010    时间: 2013-4-24 22:11
/*
去除ArrayList集中的重复元素
*/
import java.util.*;
class ArrayListTest
{
        public static void main(String[] args)
        {
        ArrayList al=new ArrayList();  //定义一个集合al
        al.add("java01");
        al.add("java02");
        al.add("java02");
        al.add("java03");
        al.add("java04");
        al.add("java01");
                System.out.println(al);
                System.out.println(myGet(al));
        }

        public static ArrayList myGet(ArrayList al) {
                ArrayList newal = new ArrayList(); // 定义一个新集合
        Iterator it=al.iterator();  //获取迭代器                                        标注:这个地方是获取原有集合a1的迭代器,而不是新集合newa1
        while(it.hasNext())  //判断是否有下一个元素
        {
        Object obj=it.next(); //把获取到的元素的地址值赋给obj

        ////判断新集合里没有obj元素,如果没有就把obj添加到新集合
        if(!newal.contains(obj))
                newal.add(obj);
        }
        return newal;  //返回新集合
        }
}
问题在上面   标注   处,迭代器获取错了,应该是原有集合的.
作者: 403383221    时间: 2013-4-24 22:16
本帖最后由 403383221 于 2013-4-24 22:28 编辑

应该是获取原集合的迭代器啊
Iterator it=al.iterator();
  1. ArrayList newal=new ArrayList();  //定义一个新集合

  2.       Iterator it=newal.iterator();  //获取迭代器(这里错了,应迭代原集合)

  3.        while(it.hasNext())  //判断是否有下一个元素
复制代码

作者: 刘学明       时间: 2013-4-24 22:22
  1. /*
  2. 去除ArrayList集中的重复元素
  3. */
  4. import java.util.*;
  5. class ArrayListTest
  6. {
  7.         public static void main(String[] args)
  8.         {
  9.         ArrayList al=new ArrayList();  //定义一个集合al
  10.         al.add("java01");
  11.         al.add("java02");
  12.         al.add("java02");
  13.         al.add("java03");
  14.         al.add("java04");
  15.         al.add("java01");
  16.         System.out.println(al);
  17.         System.out.println(myGet(al));
  18.         }

  19.         public static ArrayList myGet(ArrayList al)
  20.         {
  21.         ArrayList newal=new ArrayList();  //定义一个新集合
  22.         Iterator it=newal.iterator();  //获取迭代器         !!!!这个地方错了   
  23.         while(it.hasNext())  //判断是否有下一个元素
  24.         {
  25.         Object obj=it.next(); //把获取到的元素的地址值赋给obj

  26.         ////判断新集合里没有obj元素,如果没有就把obj添加到新集合
  27.         if(!newal.contains(obj))
  28.         newal.add(obj);
  29.         }
  30.         return newal;  //返回新集合
  31.         }
  32. }
复制代码
代码中   Iterator it=newal.iterator();  //这句话是错的        获取迭代器应该是获取al的迭代器 因为 newal中还没有内容 如果获取newal的迭代器 则不会执行 while(it.hasNext())循环 后面的语句都没执行 所以没有输出   应该改成获取al的迭代器  Iterator it = al.iterator():
作者: 朱德帅    时间: 2013-4-24 22:39
大哥,你获取的迭代器是你在方法方法中新定义的集合的,当然是空的啊!
  1. public static ArrayList myGet(ArrayList al)

  2.         {

  3.         ArrayList newal=new ArrayList();  //定义一个新集合
  4.        //这里你是获取上面新定义的集合的迭代器,应该是al.iterator();
  5.         Iterator it=newal.iterator();  //获取迭代器

  6.         while(it.hasNext())  //判断是否有下一个元素

  7.         {

  8.         Object obj=it.next(); //把获取到的元素的地址值赋给obj



  9.         ////判断新集合里没有obj元素,如果没有就把obj添加到新集合

  10.         if(!newal.contains(obj))

  11.         newal.add(obj);

  12.         }

  13.         return newal;  //返回新集合

  14.         }

复制代码

作者: yinbolove576    时间: 2013-4-24 22:46
/*
去除ArrayList集中的重复元素
*/
import java.util.*;
class ArrayListTest
{
        public static void main(String[] args)
        {
                        ArrayList al=new ArrayList();  //定义一个集合al
                        al.add("java01");
                        al.add("java02");
                        al.add("java02");
                        al.add("java03");
                        al.add("java04");
                        al.add("java01");
                        System.out.println(al);
                        System.out.println(myGet(al));
        }

        public static ArrayList myGet(ArrayList al)
        {
                        ArrayList newal=new ArrayList();  //定义一个新集合

                        Iterator it=al.iterator();  //获取迭代器        是引用对象al,而不是新创建的newal对象,否则怎么将源数据传递过来呢               
                        while(it.hasNext())  //判断是否有下一个元素
                        {
                                Object obj=it.next(); //把获取到的元素的地址值赋给obj
                                ////判断新集合里没有obj元素,如果没有就把obj添加到新集合
                                if(!newal.contains(obj))
                                        newal.add(obj);
                        }
                        return newal;  //返回新集合
        }
}

////由于定义的是一个新集合,因此这里在创建的一个迭代器里,只能将原集合中的对象al引用过来,来获取遍历的元素,否则无法获取原集合
作者: ぺsimon☆    时间: 2013-4-25 01:04
明白了谢谢大家,呵呵,真是粗心啊




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