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

Java如何修复「error: incompatible types: List无法转换为int[]」错误

解决LeetCode 57题《Insert Interval》中的Java代码错误

错误原因分析

你遇到的「error: incompatible types: List cannot be converted to int[]」错误,核心问题在于:

  • res 是 List<int[]> 类型,它的 add() 方法只能接受单个 int[] 元素;
  • 而 subArray 是 List<int[]> 类型,直接用 res.add(subArray) 相当于试图把整个列表作为一个元素插入,类型完全不匹配。

另外你的代码还有两个逻辑问题:

  1. 插入新区间的条件判断错误:应该是 newInterval[1] < intervals[i][0](新区间的结束早于当前区间的开始,才说明新区间在当前区间之前,无需重叠合并),而不是 newInterval[1] < intervals[i][1];
  2. 提前返回时直接返回 res,但方法要求返回 int[][] 类型,需要转成数组。

修正后的代码

class Solution {
    public int[][] insert(int[][] intervals, int[] newInterval) {
        List<int[]> res = new ArrayList<>();
      
        for (int i = 0; i < intervals.length; i++) {
          // 新区间在当前区间之前,无重叠,插入新区间后添加剩余所有区间并返回
          if (newInterval[1] < intervals[i][0]) {
            res.add(newInterval);
            // 使用addAll批量添加子列表的所有元素,而非add单个列表
            res.addAll(Arrays.asList(intervals).subList(i, intervals.length));
            return res.toArray(new int[res.size()][]);
          } else if (newInterval[0] > intervals[i][1]) {
            // 新区间在当前区间之后,无重叠,直接添加当前区间
            res.add(intervals[i]);
          } else {
            // 有重叠,合并区间
            newInterval[0] = Math.min(intervals[i][0], newInterval[0]);
            newInterval[1] = Math.max(intervals[i][1], newInterval[1]);
          }
        }
      
        // 循环结束后,说明新区间在所有区间之后,直接添加
        res.add(newInterval);
            
        return res.toArray(new int[res.size()][]);
    }
}

关键修改点

  • 把 res.add(subArray) 替换为 res.addAll(subArray):addAll() 方法会将子列表中的每个 int[] 元素逐个添加到 res 中,符合类型要求;
  • 修正插入条件为 newInterval[1] < intervals[i][0],确保逻辑正确;
  • 提前返回时调用 res.toArray(new int[res.size()][]),将List转换为方法要求的 int[][] 类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 21:10:39