Java 列表迭代器';s previous()方法
文件说: 前() 返回列表中的上一个元素并向后移动光标位置 假设我有一个ArrayList:[1,2,3,4,5] 最初光标指向此处:[1,2,3,4,5]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 >
^
|
在这段代码之后
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
,它将再次打印相同的元素。