一个硬件问题
您将获得一个列表L和另一个列表P,其中包含按升序排序的整数。操作printLots(L,P)将打印L中由P指定的位置的元素。例如,如果P = 1,3,4,6,则位于1,3,4和6中的元素在L中印刷。编写程序printLots(L,P)。您提供的代码应该是java方法本身(不是伪代码),包含类不是必需的。 您可以仅使用列表L和P继承的公共集合https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html方法。您可能不使用仅在List中的方法。 Collection方法返回的任何内容都是合理的游戏,因此您可能会考虑如何使用迭代器。
大家好,最重要的是问题的一部分。我对这意味着什么很困惑。我对收集和列表不是很熟悉。那么这个要求是否意味着我不能使用诸如get()之类的方法,而是必须使用Iterator?
这是我的代码:
public static void printLots(List<Integer> L, List<Integer> P){
int size = L.size;
for(int i=0; i<P.size; i++){
int pos = P.get(i);
if(P.get(i) <= size){
int val = L.get(pos);
System.out.println(val);
}
else{
System.out.println("It has exceeded the number of elements in L");
}
}
}
答案 0 :(得分:0)
不,你不能使用List.get(idx)
。
我认为他们正试图让你想到一个更有趣的&#34;这样做的方式。 Collection
在技术上确定了您可以使用的toArray
方法,但它可能违背了您设置的问题精神。
Collection
也有contains
方法,因此您可以迭代第一个列表,递增计数器,并查看第二个列表是否每次包含该索引。如果是这样,请打印出来。这是一种非常低效的方式,但它可以解决问题。
我建议您将参数声明更改为Collection<Integer>
,这样编译器就会阻止您意外使用List
答案 1 :(得分:0)
我怀疑你是对的,.get(int)
是不允许的。
由于P
中的位置是按升序给出的,因此很容易使用迭代器并保留当前元素的计数器&#34;迭代在&#34;。柜台也严格上升。
A&#34;作弊&#34;将使用.toArray()
并在其中使用索引访问:)