我正在研究一个问题的硬件问题:给你一个列表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);
}
答案 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]);
}
}
}