Java 根据项目数打印数组列表的第n个项目

Java 根据项目数打印数组列表的第n个项目,java,Java,我有一个数组列表: ArrayList<String> melody = new ArrayList<>(); ArrayList melody=新的ArrayList(); melody包含像“EEAABB”、“AAGDFE”这样的字符串。。。旋律的大小可能会有所不同 现在,根据melody的大小,我想打印出第N个字符串和最后几个字符串 例如: melody有2037个元素:每100个元素打印一次,最后5个元素打印一次 melody有100个元素:每10个元素打印一

我有一个
数组列表

ArrayList<String> melody = new ArrayList<>();
ArrayList melody=新的ArrayList();
melody
包含像“EEAABB”、“AAGDFE”这样的字符串。。。
旋律的大小可能会有所不同

现在,根据
melody
的大小,我想打印出第N个字符串和最后几个字符串

例如:

  • melody有2037个元素:每100个元素打印一次,最后5个元素打印一次
  • melody有100个元素:每10个元素打印一次,最后5个元素打印一次
  • 100和10不需要是固定的数字,它们只是举个例子


    我这里的问题是如何根据列表的大小找出应该打印第n个元素

    我希望它尽可能具有可伸缩性


    我知道如何打印列表中的元素,但我不知道如何确定在屏幕上打印它们的频率(特别是当数组中有少量元素时)。

    我创建了一个方法,可以打印第x个元素
    n
    ,最后y个元素
    last

    整个想法是,将此作为一个方法将允许该过程对给定给它的任何参数都有效

    我正在使用的示例是一个充满数字的列表,这样可以更容易地看到这个过程

    public static void main(String[] args) {
        ArrayList<String> melody = new ArrayList<>();
        melody.add("1");
        melody.add("2");
        melody.add("3");
        melody.add("4");
        melody.add("5");
        melody.add("6");
        melody.add("7");
        melody.add("8");
        melody.add("9");
        melody.add("10");
        print(melody, 3, 5);
    }
    
    private static void print(ArrayList<String> list, int n, int last) {
        ArrayList<String> filtered = new ArrayList<>();
        int size = list.size();
    
        System.out.println("Every " + n + " elements in the list: ");
    
        for (int i = 0; i < size; i += n) {
            String str = list.get(i);
            filtered.add(str);
            System.out.println(str);
        }
    
        System.out.println("The last " + last + " elements excluding every " + n + " elements in the list:");
    
        int count = 0;
        for (int i = size - 1; i >= 0; i--) {
            String str = list.get(i);
            if (!filtered.contains(str)) {
                System.out.println(str);
                if (++count == last) break;
            }
        }
    }
    

    我们怎么知道?你的作业没有说明如何计算
    n
    ?“我这里的问题是如何根据列表的大小确定我应该打印第n个元素。”你必须定义此规则。或者,如果这是一个家庭作业,你需要问你的老师。一般来说,没有固定的方法可以做到这一点。不,没有,我需要自己选择。你可以将其作为一种方法,类似于
    count(ArrayList list,int n)
    。决定
    n
    实际上是什么将取决于调用该方法的人。一个可能的规则是,如果列表的长度小于100,则每10个元素打印一次。如果长度在100到1000之间,则每1000个元素打印一次。如果长度在1000到一百万之间,则每10000个元素打印一次。但这只是无限可能规则的一个例子。你必须选择一个。我们不能告诉你哪一个对你的处境有利。泰最初的想法,我和你的想法很相似。但我意识到最后的项目不能是每n打印出来的项目。(melody.size()%n)能确保吗?
    melody.size()/n
    是多少次
    n
    适合
    melody
    ,而
    melody.size()%n
    将是剩余部分。除非我遗漏了什么,否则我不确定这将如何帮助解决问题的第二部分。我已经编辑了我的答案。这当然不是解决这个问题的唯一方法,但可能更容易理解。我将每个
    n
    th元素添加到一个不同的列表
    filtered
    ,然后向后循环
    melody
    ,打印未在
    filtered
    中的元素。
    Every 3 elements in the list: 
    1
    4
    7
    10
    The last 5 elements excluding every 3 elements in the list:
    9
    8
    6
    5
    3