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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李健09 中级黑马   /  2013-8-11 21:19  /  1482 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李健09 于 2013-8-13 12:09 编辑

import java.util.*;
public class ListDemo
{
    public static void sop(Object obj)
    {
        System.out.println(obj);
    }
    public static void method_ListIterator()
    {
        ArrayList al=new ArrayList();
        al.add("java01");
        al.add("java02");
        al.add("java03");
        al.add("java04");
        sop("原集合"+al);
        //在迭代器过程中准备添加和删除元素
        /*ListIterator li=al.listIterator();
        while(li.hasNext())//迭代器
        {
            Object obj=li.next();
            if(obj.equals("java02"))
                li.set("java006");
        }
        while(li.hasPrevious())
        {
            sop("pre="+li.previous());
        }*/
        for(ListIterator li=al.listIterator();li.hasNext();)//迭代器1
        {
            Object obj=li.next();
            if(obj.equals("java02"))
              li.set("java006");//[java01, java006, java03, java04] 修改java02为java006
        }
        for(ListIterator li=al.listIterator();li.hasPrevious();)//迭代器2
        {
            sop("pre="+li.previous());
        }
        sop("操作后"+al);
    }
    public static void main(String[] args)
    {
     method_ListIterator();
   }
}
问题 为什是么我用while写的迭代器可以运行 而for些的迭代器却不可以?
       现象 单个for迭代器1却可以可以运行为何迭代器2加上了反而不能呢?

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 神马都是浮云

查看全部评分

6 个回复

正序浏览
                 ListIterator li = al.listIterator();
//                 while (li.hasNext())// 迭代器
//                 {
//                 Object obj = li.next();
//                 if (obj.equals("java02"))
//                 li.set("java006");
//                 }
//                 while (li.hasPrevious()) {
//                 sop("pre=" + li.previous());
//                 }

                for ( al.listIterator(); li.hasNext();)// 迭代器1
                {
                        Object obj = li.next();
                        if (obj.equals("java02"))
                        {
                                li.set("java006");// [java01, java006, java03, java04]
                        }
                        // 修改java02为java006
                }
                for (al.listIterator(); li.hasPrevious();)// 迭代器2
                {
                        sop("pre="+li.previous());
                }
                sop(al);
回复 使用道具 举报
改成这样试下:
  1.                  ListIterator li = al.listIterator();
  2. //                 while (li.hasNext())// 迭代器
  3. //                 {
  4. //                 Object obj = li.next();
  5. //                 if (obj.equals("java02"))
  6. //                 li.set("java006");
  7. //                 }
  8. //                 while (li.hasPrevious()) {
  9. //                 sop("pre=" + li.previous());
  10. //                 }

  11.                 for ( al.listIterator(); li.hasNext();)// 迭代器1
  12.                 {
  13.                         Object obj = li.next();
  14.                         if (obj.equals("java02"))
  15.                         {
  16.                                 li.set("java006");// [java01, java006, java03, java04]
  17.                         }
  18.                         // 修改java02为java006
  19.                 }
  20.                 for (al.listIterator(); li.hasPrevious();)// 迭代器2
  21.                 {
  22.                         sop("pre="+li.previous());
  23.                 }
  24.                 sop(al);
复制代码
回复 使用道具 举报
本帖最后由 李健09 于 2013-8-12 09:33 编辑
sergio 发表于 2013-8-11 22:45
可以运行啊,eclipse中测试了?不知道报什么错误?
  1. <p>import java.util.*;
  2. public class ListDemo
  3. {
  4.      public static void sop(Object obj)
  5.      {
  6.          System.out.println(obj);
  7.      }
  8.      public static void method_ListIterator()
  9.      {
  10.          ArrayList al=new ArrayList();
  11.          al.add("java01");
  12.          al.add("java02");
  13.          al.add("java03");
  14.          al.add("java04");
  15.          sop("原集合"+al);
  16.          //在迭代器过程中准备添加和删除元素
  17.         /*ListIterator li=al.listIterator();
  18.          while(li.hasNext())//迭代器
  19.         {
  20.              Object obj=li.next();
  21.              if(obj.equals("java02"))
  22.                  li.set("java006");
  23.          }
  24.          while(li.hasPrevious())
  25.          {
  26.              sop("pre="+li.previous());
  27.          }*/
  28.          for(ListIterator li=al.listIterator();li.hasNext();)//迭代器1
  29.          {
  30.              Object obj=li.next();
  31.              if(obj.equals("java02"))
  32.                li.set("java006");//[java01, java006, java03, java04] 修改java02为java006
  33.          }
  34.         sop("ListIterator hasNext 操作后"+al);
  35.          for(ListIterator li=al.listIterator();li.hasPrevious();)//迭代器2
  36.          {
  37.              sop("pre="+li.previous());
  38.          }
  39.       }
  40.      public static void main(String[] args)
  41.      {
  42.       method_ListIterator();
  43.     }</p><p>}</p><p>//你看下这样的代码   迭代器1中 sop("ListIterator hasNext 操作后"+al);这个可以运行;而2中的sop("pre="+li.previous());却不可以也没有抛出错误;</p><p>//输出的结果</p><p>原集合[java01, java02, java03, java04]ListIterator hasNext 操作后[java01, java006, java03, java04]</p>
复制代码
回复 使用道具 举报
神之梦 发表于 2013-8-11 23:36
建议代码放在编辑栏的“”这个东东里边
另外能把错误提示贴出更好

嗯 好的
回复 使用道具 举报
建议代码放在编辑栏的“<>”这个东东里边
另外能把错误提示贴出更好
回复 使用道具 举报
可以运行啊,eclipse中测试了?不知道报什么错误?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马