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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡元 中级黑马   /  2012-6-18 06:25  /  1262 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 胡元 于 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. }
复制代码
傻话不说了,直接上代码!

4 个回复

倒序浏览
你代码有问题,那个if语句永远执行不到,不信你可以在里面加一个输出语句试试,因为你遍历的是a1的元素,那obj一定是a1里的元素,即al.contains(obj)一定为真,那if就不可能执行到,应该改为ar.contains(obj);你是不是看错老师代码了?把ar看成a1了?
回复 使用道具 举报
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);
}
}
问题你自己也发现了,粗心大意造成的
回复 使用道具 举报
我想问一下如果改成你说的“ar”
那public static ArrayList singleElement(ArrayList al)传进来的“al”还有意义吗?
回复 使用道具 举报
确实是判断条件出问题了,首先你的迭代器是对 al  也就是传入的参数进行迭代
那么你循环取出的值就是 al 中的元素
你有个一新的空集合 ar
那么判断条件应该是 空集合 ar 中是否 包含你每次读取出来的 al 中的元素  不包括就存,包括就不存
即是 !ar.contains(it.next())
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马