黑马程序员技术交流社区

标题: 为何自定义的函数无法去除重复的函数? [打印本页]

作者: 追逐    时间: 2014-3-21 20:11
标题: 为何自定义的函数无法去除重复的函数?
本帖最后由 追逐 于 2014-3-21 20:42 编辑

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

/*
取出ArrayList集合中的重复元素
*/
  1. class ArrayListTest
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 ArrayList al = new ArrayList();
  6.                 al.add("java01");
  7.                 al.add("java01");
  8.                 al.add("java02");
  9.                 al.add("java02");
  10.                 al.add("java03");
  11.                 System.out.println(al);
  12.                 al = quChu(al);
  13.                 System.out.println(al);
  14.         }

  15.         public static ArrayList quChu(ArrayList al) //此函数为何无法去除重复函数,求解????????
  16.         {
  17.                 //创建一个容器
  18.                 ArrayList a = new ArrayList();
  19.                 //定义一个迭代器
  20.                 Iterator it = a.iterator();
  21.                 for( ; it.hasNext(); ) //只要容器不为空,就继续执行。知道结果为false。就停止循环
  22.                 {
  23.                         Object obj = it.next();
  24.                         if(!a.contains(obj)) //此容器中不包含此元素。就往下执行
  25.                         {
  26.                                 a.add(obj);
  27.                         }
  28.                 }
  29.                 return a;
  30.         }

  31. }
复制代码
此为运行结果:



作者: 乔钰博    时间: 2014-3-21 20:29
因为你在方法内new了一个ArrayList a,new出来的是空的 Iterator it = a.iterator();也是空的  改成 Iterator it = al.iterator();
作者: 焚雨成灰    时间: 2014-3-21 20:33
  1. //定义一个迭代器
  2.                 Iterator it = al.iterator();
复制代码

应该是这个地方出问题了,不小心啊
作者: 青木郎    时间: 2014-3-21 20:34
改成


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

/*
取出ArrayList集合中的重复元素
*/
class ArrayListTest
{
        public static void main(String[] args)
        {
                ArrayList al = new ArrayList();
                al.add("java01");
                al.add("java01");
                al.add("java02");
                al.add("java02");
                al.add("java03");
                System.out.println(al);
                al = quChu(al);
                System.out.println(al);
        }

        public static ArrayList quChu(ArrayList al) //此函数为何无法去除重复函数,求解????????
        {
                //创建一个容器
                //ArrayList a = new ArrayList();
                //定义一个迭代器
                Iterator it = al.iterator();
                for( ; it.hasNext(); ) //只要容器不为空,就继续执行。知道结果为false。就停止循环
                {
                        Object obj = it.next();
                        if(!a.contains(obj)) //此容器中不包含此元素。就往下执行
                        {
                                a.add(obj);
                        }
                }
                return a;
        }

}

作者: 轩辕冰晨    时间: 2014-3-21 20:37
import java.util.*;  
  
class ArrayListTest   
{  
    public static void sop(Object obj)  
    {  
        System.out.println(obj);  
    }  
  
    public static void main(String[] args)   
    {  
        ArrayList al = new ArrayList();  
  
        al.add("java01");  
        al.add("java02");  
        al.add("java01");  
        al.add("java02");  
        al.add("java01");  
        al.add("java03");  
  
        sop(al);  
  
        al = singleElement(al);  
  
        sop(al);  
    }  
  
    public static ArrayList singleElement(ArrayList al)  
    {  
        ArrayList newAl = new ArrayList();  
  
        for(Iterator it = al.iterator(); it.hasNext();)  
        {  
            Object obj = it.next();  
            if(!newAl.contains(obj))  
            {  
                newAl.add(obj);  
            }  
        }  
        return newAl;  
    }  
}  
作者: 追逐    时间: 2014-3-21 20:40
好的。问题解决了。谢谢各路大神
作者: yanzhendong    时间: 2014-3-21 20:48
楼主你好,你这段代码有两个问题,第一,如果你定义了一个迭代器,最好不要再往里面再执行add()操作,可能会出错,第二,你的迭代器错误的指向了一个空arraylist,你本应该指向al的,一下是我建议的代码:
  1. public static ArrayList quChu(ArrayList al) //此函数为何无法去除重复函数,求解????????

  2.         {

  3.                 //创建一个容器

  4.               ArrayList a =new ArrayList();

  5.                 //定义一个迭代器

  6.                 Iterator it = al.iterator();

  7.                 for( ; it.hasNext(); ) //只要容器不为空,就继续执行。知道结果为false。就停止循环

  8.                 {

  9.                         Object obj = it.next();

  10.                         if(!a.contains(obj)) //此容器中不包含此元素。就往下执行

  11.                         {

  12.                                 a.add(obj);

  13.                         }

  14.                 }

  15.                 return a;

  16.         }



  17. }

复制代码

作者: 刘先斌    时间: 2014-3-21 21:02
   //创建一个容器
                ArrayList a = new ArrayList();
                //定义一个迭代器
                Iterator it = a.iterator();//#这里应该是传进来的内个容器而不是新建立的这个!




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