You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java遍历ArrayList为每个元素插入n+1到下一位的代码问题求助

Java练习题实现思路与修正代码

现有代码问题

  • 你当前的代码逻辑和需求不符:定义的result变量没有实际作用,累加元素的逻辑和「每个元素+1插入下一位」的需求完全不匹配
  • 增强for循环(for-each)遍历ArrayList时如果直接修改列表结构(插入/删除元素),会触发ConcurrentModificationException并发修改异常,不能用于这个场景

实现思路

核心逻辑是遍历原列表的原有元素,每处理一个元素就把+1后的值插入到它的下一个位置,因为插入元素会让后续原有元素的下标整体后移1位,所以遍历的时候用普通for循环,步长设为2即可准确找到下一个待处理的原有元素。

可选实现方案

方案1:直接修改传入的列表

import java.util.ArrayList;

public class ListAddNPlusOne {
    public static ArrayList<Integer> addNPlusOne(ArrayList<Integer> numbers) {
        // 空列表/空指针校验
        if(numbers == null || numbers.isEmpty()) {
            throw new IllegalArgumentException();
        }
        // 普通for循环遍历,步长为2跳过插入的元素
        for (int i = 0; i < numbers.size(); i += 2) {
            Integer current = numbers.get(i);
            // 插入到当前位置的下一位,值为当前值+1
            numbers.add(i + 1, current + 1);
        }
        return numbers;
    }
}

方案2:不修改原入参,返回新列表

如果不想修改传入的原始列表,创建新列表写入结果的逻辑更安全:

import java.util.ArrayList;

public class ListAddNPlusOne {
    public static ArrayList<Integer> addNPlusOne(ArrayList<Integer> numbers) {
        if(numbers == null || numbers.isEmpty()) {
            throw new IllegalArgumentException();
        }
        ArrayList<Integer> res = new ArrayList<>();
        for (Integer num : numbers) {
            res.add(num);
            res.add(num + 1);
        }
        return res;
    }
}

两种方案的输出结果一致,比如传入[1,3,5]最终都会返回[1,2,3,4,5,6],符合需求。

内容的提问来源于stack exchange,提问作者HY2000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 23:06:00