黑马程序员技术交流社区

标题: 去除重复元素的疑惑,求指点 [打印本页]

作者: 胡元    时间: 2012-6-18 06:25
标题: 去除重复元素的疑惑,求指点
本帖最后由 胡元 于 2012-6-18 07:07 编辑
  1. import java.util.*;
  2. class SingleElement
  3. {
  4. public static void main(String[] args)
  5. {
  6.   ArrayList al = new ArrayList();
  7.   al.add("java01");
  8.   al.add("java01");
  9.   al.add("java02");
  10.   al.add("java02");
  11.   al.add("java03");
  12.   al.add("java03");
  13.   sop(al);
  14.   al = singleElement(al);
  15.   sop(al);
  16. }
  17. public static ArrayList singleElement(ArrayList al)
  18. {
  19.   ArrayList  ar = new ArrayList();
  20.   Iterator it = al.iterator();
  21.   
  22.   while(it.hasNext())
  23.   {
  24.    Object obj = it.next();
  25.    sop(obj);
  26.    if(!al.contains(obj))//我调试过了,这里出了问题。但是明明和老师讲的一样呀!
  27.     ar.add(obj);
  28.   }
  29.   return ar;
  30. }
  31. public static void sop(Object obj)
  32. {
  33.   System.out.println(obj);
  34. }
  35. }
复制代码
傻话不说了,直接上代码!
作者: 袁培育    时间: 2012-6-18 09:35
你代码有问题,那个if语句永远执行不到,不信你可以在里面加一个输出语句试试,因为你遍历的是a1的元素,那obj一定是a1里的元素,即al.contains(obj)一定为真,那if就不可能执行到,应该改为ar.contains(obj);你是不是看错老师代码了?把ar看成a1了?
作者: 王章亚    时间: 2012-6-18 09:50
import java.util.*;
class SingleElement
{
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");
  al.add("java03");
  sop(al);
  al = singleElement(al);
  sop(al);
}
public static ArrayList singleElement(ArrayList al)
{
  ArrayList  ar = new ArrayList();
  Iterator it = al.iterator();
  
  while(it.hasNext())
  {
   Object obj = it.next();
   sop(obj);
   if(!al.contains(obj))//你仔细看看这里的al对吗?应该是你写的ar吧!!换上ar你试试
    ar.add(obj);
  }
  return ar;
}
public static void sop(Object obj)
{
  System.out.println(obj);
}
}
问题你自己也发现了,粗心大意造成的
作者: 常佳杰    时间: 2012-6-18 12:35
我想问一下如果改成你说的“ar”
那public static ArrayList singleElement(ArrayList al)传进来的“al”还有意义吗?
作者: 吴小东    时间: 2012-6-18 16:05
确实是判断条件出问题了,首先你的迭代器是对 al  也就是传入的参数进行迭代
那么你循环取出的值就是 al 中的元素
你有个一新的空集合 ar
那么判断条件应该是 空集合 ar 中是否 包含你每次读取出来的 al 中的元素  不包括就存,包括就不存
即是 !ar.contains(it.next())




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