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

Kotlin的sum变量为何多计算1导致summation(8)结果为37?

问题根因

你代码中的sum是单例对象GrassHopper的全局成员属性,而不是summation函数的内部局部变量,Kotlin 中object声明的单例对象的属性会在整个程序运行周期内持久保存值,不会在每次函数调用时自动重置。

  • 第一次调用GrassHopper.summation(1)时,sum初始值为0,累加1后变为1,返回结果1符合预期,但调用结束后sum的值已经被修改为1,没有重置回初始值。
  • 第二次调用GrassHopper.summation(8)时,sum从1开始累加1到8的和(1+2+...+8=36),最终计算结果为1+36=37,和预期的36不符。
修复方案

只需要把sum变量移到summation函数内部定义即可,每次调用函数都会初始化新的sum变量,不会复用之前的计算结果:

object GrassHopper {
  fun summation(n:Int):Int {
    var sum = 0
    for (i in 1..n){
        sum += i
    }
    return sum
  }
}

如果确实需要把sum作为单例的成员属性,也可以在每次函数调用开始时先将sum重置为0:

object GrassHopper {
    var sum = 0
  fun summation(n:Int):Int {
    sum = 0 // 每次调用先重置初始值
    for (i in 1..n){
        sum += i
    }
      return sum
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 12:57:00