有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

仅在集合中使用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");
        }
    }



}

共 (2) 个答案

  1. # 1 楼答案

    不,您不能使用List.get(idx)

    我认为他们试图让你思考一种更“有趣”的方式Collection在技术上定义了一个toArray方法,您可以使用它,但它可能与您设置的问题的精神背道而驰

    Collection还有一个contains方法,因此您可以迭代第一个列表,增加一个计数器,并查看第二个列表是否每次都包含该索引。如果是,请打印出来。这是一种非常低效的方法,但可以解决问题

    我建议将参数的声明改为Collection<Integer>,这样编译器将防止您意外使用List中存在的方法

  2. # 2 楼答案

    我怀疑你是对的,而且.get(int)是不允许的

    由于P中的位置是按升序给出的,因此很容易使用迭代器并保留当前“迭代”的元素的计数器。计数器也在严格上升

    “欺骗”是使用.toArray()并在其中使用索引访问:)