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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 茂子 中级黑马   /  2014-5-29 22:30  /  1511 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天学习迭代这一块的时候发现个问:
第一段代码:        for(Iterator it=al1.listIterator();it.hasNext();)
                {
                        sop("al1("+x+++"):"+it.next());
                        it.remove();
                }
能够正常运行,并且输出结果al1(0):boy     al1(1):girl

第二段代码:                for(Iterator it=al1.listIterator();it.hasNext();)
                {                       
                        it.remove();
                        sop("al1("+x+++"):"+it.next());
                }
点击运行是蹦出:IllegalStateException异常,这是怎么回事呢,只是remove和next换了个顺序。

评分

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

查看全部评分

7 个回复

倒序浏览
本帖最后由 相濡、彼岸 于 2014-5-29 22:55 编辑

这个异常是:在非法或不适当的时间调用方法时产生的信号。for循环看的有点别扭,用while验证一下试试!
回复 使用道具 举报
这个异常没见过额
回复 使用道具 举报
解释这个现象,要先解释这个异常和两个方法,如下:
        IllegalStateException异常,是指在非法或不适当的时间调用方法时产生的信号。换句话说,即 Java 环境或 Java 应用程序没有处于请求操作所要求的适当状态下。
next()    返回迭代的下一个元素。
remove()   从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。
     第二段代码中,你先执行了remove操作,也就是移除了当前元素,那么当前元素已经不存在了,而你再对该元素进行操作,那肯定是不行的。
      这样的解释不知道能否让你明白,如果实在不明白就把它当做数组的空指针异常来理解吧,意思是差不多的。

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 茂子 于 2014-5-30 09:03 编辑
何堂红 发表于 2014-5-30 00:37
解释这个现象,要先解释这个异常和两个方法,如下:
        IllegalStateException异常,是指在非法或不适 ...

谢谢哈  思考了以下,似乎我先把集合元素删掉了,然后再进行下一步的操作,但是集合长度已经不是原有长度了,应该可以把它认作是(角标越界)这种情况,差不多吧???
回复 使用道具 举报
相濡、彼岸 发表于 2014-5-29 22:52
这个异常是:在非法或不适当的时间调用方法时产生的信号。for循环看的有点别扭,用while验证一下试试!
...

节约内存  呵呵  使用while应该也是这种现象,,谢谢哈  基本上想通了
回复 使用道具 举报
想通了就好,不客气
回复 使用道具 举报
茂子 发表于 2014-5-30 09:02
谢谢哈  思考了以下,似乎我先把集合元素删掉了,然后再进行下一步的操作,但是集合长度已经不是原有长度 ...

嗯,是的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马