仅在集合中使用java方法
问题
给您一个列表L和另一个列表p,其中包含按升序排序的整数。printLots(L,P)操作将打印位于P指定位置的L中的元素。例如,如果P=1,3,4,6,则打印位于L中位置1,3,4和6的元素。编写程序printLots(L,P)。您提供的代码应该是java方法本身(不是伪代码),不需要包含类。 只能使用列表L和P继承的公共集合https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html方法。不能使用仅在列表中的方法。收集方法返回的任何内容都是公平的,因此您可能会考虑如何使用迭代器
大家好,首先是问题的一部分。我对它的意思很困惑。我对收藏和清单不是很熟悉。那么,这个要求是否意味着我不能使用get()之类的方法,而必须使用迭代器呢
这是我的密码:
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");
}
}
}
# 1 楼答案
不,您不能使用
List.get(idx)
我认为他们试图让你思考一种更“有趣”的方式
Collection
在技术上定义了一个toArray
方法,您可以使用它,但它可能与您设置的问题的精神背道而驰Collection
还有一个contains
方法,因此您可以迭代第一个列表,增加一个计数器,并查看第二个列表是否每次都包含该索引。如果是,请打印出来。这是一种非常低效的方法,但可以解决问题我建议将参数的声明改为
Collection<Integer>
,这样编译器将防止您意外使用List
中存在的方法# 2 楼答案
我怀疑你是对的,而且
.get(int)
是不允许的由于
P
中的位置是按升序给出的,因此很容易使用迭代器并保留当前“迭代”的元素的计数器。计数器也在严格上升“欺骗”是使用
.toArray()
并在其中使用索引访问:)