为什么我的迭代器没有从整个链表中返回元素?

时间:2017-02-10 07:57:04

标签: java

我正在研究一个问题的硬件问题:给你一个列表L和另一个列表P,它包含按升序排序的整数。操作printLots(L,P)将打印L中由P指定的位置的元素。例如,如果P = 1,3,4,6,则位于1,3,4和6中的元素在L中印刷。编写程序printLots(L,P)。

我只允许使用Collection中的方法,这意味着我不能使用get(index)。

然而,我的代码只返回列表P中的最后一个元素,而不是全部。我不知道出了什么问题。

这是我的代码:

public static void printLots(Collection<Integer> L, Collection<Integer> P){

         int size = P.size();

        Iterator<Integer> iter = P.iterator();
        int pos = 0;
        while(iter.hasNext()){
            pos = iter.next();
        }
        System.out.println(pos);

        Integer [] arr = L.toArray(new Integer[size]);
        System.out.println(arr[pos]);


    }

    public static void main(String[] args){
        Collection<Integer> L = new ArrayList<>();
        Collection<Integer> P = new ArrayList<>();
        P.add(2);
        P.add(3);

        L.add(1);
        L.add(3);
        L.add(5);
        L.add(6);

        printLots(L,P);

    }

3 个答案:

答案 0 :(得分:1)

这是你的问题:

int pos = 0;
while(iter.hasNext()){
    pos = iter.next();
}
System.out.println(pos);

由于您在循环中不执行任何操作,因此最终将pos作为最后一个值。

int pos = 0;
while(iter.hasNext()){
    pos = iter.next();
    System.out.println(pos);
}

将显示完整列表。

PS:因为我不确定我不知道你想做什么,我只会指出这个问题;)你从原始列表中构建一个数组。我想你想用contains检查另一个列表中是否存在该值,并将其添加到数组/列表中以打印结果。

答案 1 :(得分:0)

将您的代码更改为

while(iter.hasNext()){
     pos = iter.next();
     System.out.println(pos);
}

答案 2 :(得分:0)

public static void main(String[] args){
    Collection<Integer> L = new ArrayList<>();
    Collection<Integer> P = new ArrayList<>();
    P.add(0);
    P.add(1);
    P.add(3);
    P.add(4);


    L.add(1);
    L.add(3);
    L.add(5);
    L.add(6);

    printLots(L,P);

}

public static void printLots(Collection<Integer> L, Collection<Integer> P) {
    Integer[] arr = L.toArray(new Integer[L.size()]);

    Iterator<Integer> iter = P.iterator();
    int pos = 0;
    while (iter.hasNext()) {
        pos = iter.next();

        if (pos >= arr.length) {
            System.out.println("Position[P] : " + pos + "    " + "Location[L] : OUT OF INDEX.");
        } else {
            System.out.println("Position[P] : " + pos + "    " + "Location[L] : " + arr[pos]);                
        }
    }
}