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

示例:

输入:

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));
           }
        }
    } 

我的 idea 是,如果第一个元素小于列表中的第二个元素,则将第一个元素的值加1.例如,如果第一个元素是4,则代码会将5添加到列表中,并在添加的数字等于第二个元素的小数时停止.如果第一个元素比第二个元素多,基本上是相反的.

在被添加的数字到达列表的第二个元素之前,我不知道如何停止这个循环.我对我的代码也没有信心,我非常确定我正在犯一个我看不到的错误.

推荐答案

要在迭代列表的索引时更新列表,可以使用方法List.add(int index, E element),该方法需要插入一个索引和一个新元素.

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

  • 左元素小于右元素,且它们之间的差值大于1.新元素应等于left + 1.

  • 左边的元素比右边的元素大,而且它们的差别超过1.新元素应等于left - 1.

还可以看看精美的answer x @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);
}

Output:

[4, 5, 6, 7, 8, 7, 6, 5, 6, 7, 8, 9]

Java相关问答推荐

Cucumber TestNG Assert失败,出现java. lang. Numbercycle异常

Character::Emoji不支持带数字的字符吗?

使用传递的参数构造异常的Mockito-doThrow(或thenThrow)

JPanel透支重叠的JComcoBox

无法在Java中处理PayPal支付响应

使用PDFBox从PDF中删除图像

使用Class.this.field=Value初始化构造函数中的最后一个字段会产生错误,而使用this.field=Value则不会

使用Jackson库反序列化json

当构造函数创建一个新实例时,Java为什么需要&new";

组合连接以从两个表返回数据

在应用程序运行时更改LookAndFeel

接受类及其接口的Java类型(矛盾)

在Java中使用StorageReference将数据从Firebase存储添加到数组列表

具有多个分析模式的复杂分隔字符串的正则表达式

java21预览未命名的符号用于try-with-resources

如何在更改分辨率时将鼠标坐标计算为世界坐标

UuidGenerator Bean 类型不匹配?

Swagger.io OpenApi v3.0 声明默认媒体类型

如何在Java中调用对象上预定义的接口方法列表?

ArrayAdapter 中何时使用构造函数一和构造函数二?