填补 Java 中 ArrayList 之间空白的方法

Method that fills the gap between an ArrayList in Java

提问人:MazaPan616 提问时间:11/30/2022 更新时间:11/30/2022 访问量:290

问:

我正在制作一个名为 fillList 的方法。该方法需要 arrayList 才能工作,并且输出将为 void。 该方法应该做的是填补列表数字之间的空白。

例:

输入:

4 8 5 9

输出:

4 5 6 7 8 7 6 5 6 7 8 9

到目前为止,我的代码是这样的:

public static void fillList(ArrayList<Integer> List) {
        for(int i = 0; i < List.size(); i++) {
           if(List.get(i) < List.get(i+1) ) {
             List.add(List.get(i+1));
           }  else if(List.get(i) > List.get(i+1)) {
               List.add(List.get(i-1));
           }
        }
    } 

我的想法是,如果第一个元素小于列表中的第二个元素,则将第一个元素的值加 1。例如,如果第一个元素是,则代码将向列表中添加 a,并在添加的数字比第二个元素少 1 时停止。如果第一个元素多于第二个元素,则基本上做相反的事情。45

我不知道如何停止这个循环,直到添加的数字到达列表的第二个元素。我对我的代码也没有信心,我很确定我犯了一个我没有看到的错误。

Java 数组 for 循环 arraylist 方法

评论


答:

1赞 Alexander Ivanchenko 11/30/2022 #1

若要在循环访问列表索引时更新列表,可以使用方法 List.add(int index, E element),该方法需要插入索引和新元素。

迭代时,需要比较两个相邻的元素,并在以下条件下插入一个新元素:

  • 左边的元素小于右边的元素,它们之间的差大于 。新元素应相等。1left + 1

  • 左边的元素大于右边的元素,它们的区别大于 。新元素应相等。1left - 1

还可以看看@yezper的精美插图答案。作为一般建议:在编码之前绘制,以便更好地理解算法。

这就是实现的样子:

public static void fillList(List<Integer> list) {
    for (int i = 0; i < list.size() - 1; i++) {
        int left = list.get(i);
        int right = list.get(i + 1);
        if (left < right && left + 1 != right) {
            list.add(i + 1, left + 1);
        } else if (left > right && left - 1 != right) {
            list.add(i + 1, left - 1);
        }
    }
}

main()

public static void main(String[] args) {
    List<Integer> list1 = new ArrayList<>(List.of(4, 8, 5, 9));
    fillList(list1);
    System.out.println(list1);
}

输出:

[4, 5, 6, 7, 8, 7, 6, 5, 6, 7, 8, 9]
3赞 yezper 11/30/2022 #2

好问题,我认为你可以通过解决这个问题并真正理解每一行来学到很多东西。我为您做了一个简短的说明,以便更好地可视化问题。希望这能帮到你。一般提示:

  • 按照惯例,变量始终是小写的,因此请写入而不是listList
  • list.add(5)将数字 5 添加到 ArrayList 的末尾。例如,您可以使用将数字 5 插入数组位置 4。list.add(4, 5)

enter image description here