ArrayList调用subList报错,递归求和代码出现双错误求助
问题排查与修复
错误1:无法将List转换为ArrayList
list.subList()方法返回的是List<Integer>类型的视图,并非ArrayList实例,直接赋值给ArrayList<Integer>类型变量会触发类型不兼容错误。
修复方案二选一:
- 将
rest的类型改为List<Integer>,让代码适配更通用的List接口 - 若必须使用
ArrayList,通过构造方法转换结果:ArrayList<Integer> rest = new ArrayList<>(list.subList(1, list.size()))
错误2:Main类中未定义sumList方法
你的方法名称是sum,但递归调用时写错成了sumList(rest),属于方法名拼写错误,应该调用自身方法sum(rest)。
修正后的代码
public static int sum(ArrayList<Integer> list){ if (list.isEmpty()){ return 0; } int first = list.get(0); // 方案1:用List类型接收subList结果 List<Integer> rest = list.subList(1, list.size()); // 方案2:转换为ArrayList(若有必要) // ArrayList<Integer> rest = new ArrayList<>(list.subList(1, list.size())); return first + sum(rest); }
更推荐的优化写法:将方法参数改为List<Integer>,让方法兼容所有List实现类,扩展性更强:
public static int sum(List<Integer> list){ if (list.isEmpty()){ return 0; } int first = list.get(0); List<Integer> rest = list.subList(1, list.size()); return first + sum(rest); }
内容的提问来源于stack exchange,提问作者bob
相关产品推荐
相关产品推荐

