提问人:MazaPan616 提问时间:11/30/2022 更新时间:11/30/2022 访问量:290
填补 Java 中 ArrayList 之间空白的方法
Method that fills the gap between an ArrayList in Java
问:
我正在制作一个名为 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 时停止。如果第一个元素多于第二个元素,则基本上做相反的事情。4
5
我不知道如何停止这个循环,直到添加的数字到达列表的第二个元素。我对我的代码也没有信心,我很确定我犯了一个我没有看到的错误。
答:
1赞
Alexander Ivanchenko
11/30/2022
#1
若要在循环访问列表索引时更新列表,可以使用方法 List.add(int index, E element),
该方法需要插入索引和新元素。
迭代时,需要比较两个相邻的元素,并在以下条件下插入一个新元素:
左边的元素小于右边的元素,它们之间的差大于 。新元素应相等。
1
left + 1
左边的元素大于右边的元素,它们的区别大于 。新元素应相等。
1
left - 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
好问题,我认为你可以通过解决这个问题并真正理解每一行来学到很多东西。我为您做了一个简短的说明,以便更好地可视化问题。希望这能帮到你。一般提示:
- 按照惯例,变量始终是小写的,因此请写入而不是
list
List
list.add(5)
将数字 5 添加到 ArrayList 的末尾。例如,您可以使用将数字 5 插入数组位置 4。list.add(4, 5)
评论