黑马程序员技术交流社区

标题: 学习使用迭代时发现问题,求解 [打印本页]

作者: 茂子    时间: 2014-5-29 22:30
标题: 学习使用迭代时发现问题,求解
今天学习迭代这一块的时候发现个问:
第一段代码:        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换了个顺序。
作者: 相濡、彼岸    时间: 2014-5-29 22:52
本帖最后由 相濡、彼岸 于 2014-5-29 22:55 编辑

这个异常是:在非法或不适当的时间调用方法时产生的信号。for循环看的有点别扭,用while验证一下试试!

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

作者: 茂子    时间: 2014-5-30 09:02
本帖最后由 茂子 于 2014-5-30 09:03 编辑
何堂红 发表于 2014-5-30 00:37
解释这个现象,要先解释这个异常和两个方法,如下:
        IllegalStateException异常,是指在非法或不适 ...

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

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

嗯,是的。




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