列出迭代器以将缺少的值添加回列表

时间:2018-05-05 08:22:05

标签: java arraylist listiterator

我正在尝试将整数值插入到列表中。一旦插入了值,我将检查当前值和下一个值之间是否有10的差异。如果是,我将向第一个值添加10并将其添加回列表。

public static void main(String[] args) {
        // TODO Auto-generated method stub
        List<Integer> arrayList = new ArrayList<Integer>();
        arrayList.add(20);
        arrayList.add(40);
        arrayList.add(50);
        arrayList.add(70);
        arrayList.add(90);

        ListIterator<Integer> iterator = arrayList.listIterator();
        int firstVal = 0;
        int secVal = 0;
        while (iterator.hasNext()) {
            if (iterator.hasPrevious()) {
                firstVal = iterator.previous();
                iterator.next();
            }

            secVal = iterator.next();
            System.out.println("FirstValue " + firstVal);
            System.out.println("secVal " + secVal);
            if (firstVal != 0) {
                if ((secVal - firstVal) > 10) {
                    //iterator.previousIndex();
                    iterator.add(firstVal + 10);
                    firstVal = 0;
                    iterator.next();
                }
            }
        }
        System.out.println("iterator " + iterator.toString());

    }

我无法使其正常工作的两件事。

首先,当我尝试将差值添加回列表时,它不会添加到正确的索引中。例如,First值为20,第二个值为40,新值30在40之后添加

其次,70&amp;之间的缺失值。这里没有创建90这是80。

请理解我在这里缺少的逻辑。

谢谢你的时间。

2 个答案:

答案 0 :(得分:0)

问题是当您发现两个元素之间的差异超过10且插入时,而不是调用iterator.previous();而是调用iterator.previousIndex();

答案 1 :(得分:0)

previousIndex()的Javadoc:

  

返回后续调用previous()将返回的元素的索引。 (如果列表迭代器位于列表的开头,则返回-1。)

它不会以任何方式改变迭代器位置。

使用previous()

  

返回列表中的上一个元素并向后移动光标位置。可以重复调用此方法以向后遍历列表,或者与对next()的调用混合以来回传递。 (请注意,对nextprevious的交替调用将重复返回相同的元素。)