Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 列表迭代器';s previous()方法_Java_Listiterator - Fatal编程技术网

Java 列表迭代器';s previous()方法

Java 列表迭代器';s previous()方法,java,listiterator,Java,Listiterator,文件说: 前() 返回列表中的上一个元素并向后移动光标位置 假设我有一个ArrayList:[1,2,3,4,5] 最初光标指向此处:[1,2,3,4,5] ^ | 在这段代码之后 ListIterator li = al.listIterator(); while(li.hasNext()){ int ab = (int) li.next(); if(ab >

文件说:

前()

返回列表中的上一个元素并向后移动光标位置

假设我有一个ArrayList:[1,2,3,4,5]

最初光标指向此处:[1,2,3,4,5]

                      ^
                      |
在这段代码之后

ListIterator li = al.listIterator();
    while(li.hasNext()){
        int ab = (int) li.next();
        if(ab > 4)
            break;
    }
[1 2 3 4 5]

       ^
       | 
但当我这么做的时候

System.out.println(li.previous());
它输出
5
,而应该输出
4
,因为它返回上一个元素。为什么会发生这种情况?如何修复此问题?

li.next()
刚刚返回
5
(因为
5>4

因此,
li.previous()
再次返回
5


(另一个对
li.next()
的调用可能会抛出一个
NoTouchElementException

在循环结束时,
li.next()
返回
5
并向前移动。因此,
previous()
现在返回
5
。此时,
hasNext()
无论如何都是
false
,因此
if
中的
中断
是不必要的,因为循环条件自动计算为
false

对于索引的位置,您是不正确的

首次初始化时,指针将位于以下位置:

[1] [2] [3] [4] [5]
 ^
在您的代码之后,它将指向此处:

[1] [2] [3] [4] [5]
                     ^

所以代码后面的前一个值实际上是5,正如您在测试时看到的

原因:

方法形式

返回列表中的下一个元素并前进光标位置。此方法可以重复调用以遍历列表,也可以与对previous()的调用混合在一起来回调用。(请注意,交替调用next和previous将重复返回相同的元素。)

这就是为什么你得到5分而不是4分

修复:

正如文档中再次提到的,要获得所需的输出,您可以做的是,当条件满足时,后退一步

ListIterator li = al.listIterator();
    while(li.hasNext()){
        int ab = (int) li.next();
        if (ab > 4){
            li.previous();
            break;
        }
    }

我认为你的问题有一些关键的格式问题,这使得你无法理解你的问题。请修复问题中的光标指针。javadoc还声明
注意,交替调用next和previous将重复返回相同的元素。由于您事先调用了
next
,它将再次打印相同的元素。