Java中初始化二维ArrayList用于循环求和的类实现问题
没问题,我来帮你完善这个自定义类,刚好能练习面向对象的基础写法~
完善
SumsInLoop类实现整数对求和需求 我们可以优化类的设计,把输入数据封装为类的成员变量,让代码更符合面向对象的封装思路,同时补充完整求和逻辑,还可以加入简单的参数校验避免异常。
1. 调整类的成员变量与构造方法
把传入的对数和整数对列表作为类的私有成员变量,通过构造方法初始化,这样后续方法不用重复传参:
import java.util.ArrayList; public class SumsInLoop { // 私有成员存储输入数据,用final保证不可变 private final int numberOfPairs; private final ArrayList<ArrayList<Integer>> numbersList; // 构造方法初始化成员变量 public SumsInLoop(int numberOfPairs, ArrayList<ArrayList<Integer>> numbersList) { this.numberOfPairs = numberOfPairs; this.numbersList = numbersList; }
2. 完整实现getSums方法
遍历每一对整数计算和,同时加入参数合法性校验,避免空指针或格式错误:
public ArrayList<Integer> getSums() { ArrayList<Integer> result = new ArrayList<>(); // 校验输入列表是否合法 if (numbersList == null || numbersList.size() != numberOfPairs) { throw new IllegalArgumentException("输入的整数对数量与指定对数不匹配"); } for (ArrayList<Integer> pair : numbersList) { // 校验单个整数对的格式 if (pair == null || pair.size() != 2) { throw new IllegalArgumentException("存在格式错误的整数对,请确保每个子列表包含2个整数"); } // 计算两数之和并加入结果列表 int sum = pair.get(0) + pair.get(1); result.add(sum); } return result; } }
3. 测试使用示例
写个简单的主方法验证功能:
public class Main { public static void main(String[] args) { // 准备测试数据 ArrayList<ArrayList<Integer>> testPairs = new ArrayList<>(); testPairs.add(new ArrayList<>(){{add(10); add(20);}}); testPairs.add(new ArrayList<>(){{add(5); add(3);}}); testPairs.add(new ArrayList<>(){{add(100); add(200);}}); // 创建类实例并调用求和方法 SumsInLoop sumCalculator = new SumsInLoop(3, testPairs); ArrayList<Integer> sums = sumCalculator.getSums(); // 输出结果:[30, 8, 300] System.out.println("整数对求和结果:" + sums); } }
额外优化小建议
- 可以把成员变量的类型改为更通用的
List而非ArrayList,增强代码的灵活性; - 如果需要支持更多数值类型(比如
Long、Double),可以把类改成泛型类,提升扩展性; - 可以返回不可修改的结果列表(比如
Collections.unmodifiableList(result)),避免外部意外修改结果。
内容的提问来源于stack exchange,提问作者Zach
相关产品推荐
相关产品推荐

