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
相关产品推荐
相关产品推荐

