如何实现Java指定索引子列表升序判断方法并修复测试不通过问题
原代码问题定位
- 完全缺失边界校验逻辑,遇到外层列表为null、索引越界、指定位置子列表为null的场景会直接抛出空指针或索引越界异常,无法返回测试要求的false
- 循环逻辑直接复用入参变量
i,代码可读性差,易引入潜在逻辑bug
需覆盖的校验规则(完全匹配测试用例要求)
- 外层列表为null时直接返回false
- 传入的索引
i小于0或大于等于外层列表长度时,直接返回false - 指定索引位置的子列表为null时直接返回false
- 空子列表按规则判定为升序,返回true
- 遍历子列表时,只要出现前一个元素大于后一个元素,直接返回false
- 遍历完成无逆序场景则返回true
修改后的实现代码
public static boolean isAscending(ArrayList<ArrayList<Integer>> list, int i) { // 外层列表为空直接返回false if (list == null) { return false; } // 索引越界直接返回false if (i < 0 || i >= list.size()) { return false; } ArrayList<Integer> data = list.get(i); // 子列表为空直接返回false if (data == null) { return false; } // 独立使用循环变量检查升序,避免污染入参 for (int j = 0; j < data.size() - 1; j++) { if (data.get(j) > data.get(j + 1)) { return false; } } // 空列表、无逆序的列表均符合升序要求 return true; }
测试用例适配说明
- 传入null外层列表:触发第一层校验返回false,匹配综合测试用例的空列表判定要求
- 传入空外层列表取索引0:触发索引越界校验返回false,匹配基础测试对emptyList的判定
- 传入负索引、超出外层列表长度的正索引:触发索引校验返回false,匹配oneRow场景下的三个assertFalse判定
- 空子列表:
data.size()为0时循环不执行,直接返回true,匹配空升序列表的判定规则 - 元素相等的升序列表(如[20,20]):比较时不触发逆序判定,最终返回true,匹配元素修改后的测试要求
内容的提问来源于stack exchange,提问作者user15870380
相关产品推荐
相关产品推荐

