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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王世虎 中级黑马   /  2014-11-26 17:27  /  1144 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

刚才和一哥们交流,有点问题   先上代码:
import java.util.*;
class  CollectionDemo8
{
        public static void main(String[] args)
        {
                ArrayList al = new ArrayList();
                al.add("java01");
                al.add("java02");
                al.add("java03");
                al.add("java04");
/*
                ListIterator li = al.listIterator();
                while (li.hasNext())
                {
                        if (li.next().equals("java02"))
                        {
                                li.set("java08");
                        }
                        sop( li.next());
                        sop("haha");
                }
                while (li.hasPrevious())
                {
                        sop("haha");
                        sop("pre"+li.previous());
                }
        */       
                for (ListIterator li = al.listIterator(); li.hasPrevious(); )
                        {
                                sop("haha");
                                sop("pre"+li.previous());
                        }
                for (ListIterator li = al.listIterator(); li.hasNext(); )
                {
                        Object obj = li.next();
                        if (obj.equals("java02"))
                        {
                                li.set("java08");
                        }
                        sop( obj);
                        sop("haha");
                }               
        }       
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }
}

用while可以把集合里面的元素正向和逆向都可以取出
但用for时,正向取出可以,但为什么逆向取出不行?


感觉是for循环中的li.hasPrevious()的值是不是为假,求大神帮助



6 个回复

倒序浏览
本帖最后由 完美是芬 于 2014-11-26 17:59 编辑

因为你把
for (ListIterator li = al.listIterator(); li.hasPrevious(); )
                        {
                                sop("haha");
                                sop("pre"+li.previous());
                        }
这一段代码放到了前面,而一开始前面是没有集合对象的,
如果把这一段放到另一个for循环下面就可以了
while也一样
这等于操作的指针,一开始指针在开头,往后面走,到最后再往前面走

评分

参与人数 1技术分 +1 收起 理由
sk0806 + 1 赞一个!

查看全部评分

回复 使用道具 举报
完美是芬 发表于 2014-11-26 17:57
因为你把
for (ListIterator li = al.listIterator(); li.hasPrevious(); )
                        {

不对吧 这个不是这样理解的 吧  这两个for循环里面的ListIterator li = al.listIterator()只在本次循环有效。
而且放在前后没什么区别的
回复 使用道具 举报
王世虎 发表于 2014-11-26 22:56
不对吧 这个不是这样理解的 吧  这两个for循环里面的ListIterator li = al.listIterator()只在本次循环有 ...

你可以把while中的两个顺序换一下你就知道了。
回复 使用道具 举报
完美是芬 发表于 2014-11-26 23:29
你可以把while中的两个顺序换一下你就知道了。

哥们 while是这种情况  但是在for 这里面不适用
回复 使用道具 举报
王世虎 发表于 2014-11-27 01:15
哥们 while是这种情况  但是在for 这里面不适用

因为你把ListIterator li = al.listIterator();定义在while外面,而却把它放在for里面,你把for的这个代码也放外面看看,是不是一样的。。。ListIterator li = al.listIterator(); li就是从al集合的第一个对象前面开始的迭代的,如果一上来就查看它前面的对象,那是不存在的!
回复 使用道具 举报
静下心来,好好想想就知道了,我开始也碰到了这个问题,一楼说的对。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马