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

Kotlin max()函数类型不匹配问题:期望Boolean却得到Int

问题分析与修复

核心错误点

  • 类型不匹配根源:var maxCurrent = maxGlobal == nums[0]这行用了==比较运算符,返回的是Boolean类型,但后续代码把它当作Int参与运算,直接触发类型不匹配错误。应改为赋值语句var maxCurrent = nums[0]。
  • 循环范围错误:for (num in nums[1] .. nums[nums.size-1])是用数组元素的值作为循环范围,而非遍历数组元素。比如示例中nums[1]是3,nums.last()是-1,3..-1是无效空范围,循环不会执行。正确写法是遍历数组从第二个元素开始的所有元素。
  • 初始值逻辑错误:maxGlobal初始化为0,若数组全为负数,结果会出错,应初始化为nums[0]以覆盖全负数组场景。
  • 数组索引误用:循环中nums[num]是用元素值作为索引,极易导致数组越界,应直接使用遍历到的元素值。

修正后的代码

fun maximumSubarray(nums: List<Int>): Int {
    fun maxCustom(a: Int, b: Int): Int {
        return if (a > b) a else b
    }

    var maxGlobal = nums[0]
    var maxCurrent = nums[0]

    for (num in nums.drop(1)) {
        maxCurrent = maxCustom(num, maxCurrent + num)
        if (maxCurrent > maxGlobal) {
            maxGlobal = maxCurrent
        }
    }

    return maxGlobal
}

fun main() {
    val nums = listOf(-2, 3, 2, -1)
    val solution = maximumSubarray(nums)
    println(solution) // 输出5,对应子数组[3,2]
}

额外说明

如果不想自定义maxCustom,修正类型问题后可直接使用Kotlin标准库的kotlin.math.max函数,把maxCustom(num, maxCurrent + num)替换为max(num, maxCurrent + num)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:05:20