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

Scala快乐数判断代码中!set.add(newnum)里!的作用是什么

Scala 快乐数判断函数实现
def checkHappynumber(n: Int): Boolean = {
  val set = scala.collection.mutable.HashSet[Int]()
  var num: Int = n
  while(num != 1) {
    var newnum: Int = 0
    while (num != 0) {
      newnum += (num % 10) * (num % 10)
      num /= 10
    }
    if(!set.add(newnum)){
      return false;
    }
    num = newnum
  }
  return true
}
!set.add(newnum) 中!符号的运行逻辑

Scala中!是单目逻辑取反运算符,作用是将紧随其后的布尔表达式结果翻转,这个场景下的完整执行逻辑如下:

  • 首先执行set.add(newnum):你已经知道HashSet不允许存储重复元素,这个方法本身会返回布尔类型结果:
    • 当newnum此前不在集合中,元素添加成功,方法返回true
    • 当newnum已经存在于集合中,元素添加失败,方法返回false
  • !会对上述add方法的返回值做取反,结果作为if语句的判断条件:
    • 如果取反结果为false:说明当前计算出的平方和newnum是第一次出现,没有进入循环,不会触发if块内的返回逻辑,程序会继续将newnum赋值给num,进入下一轮各位平方和计算
    • 如果取反结果为true:说明newnum之前已经出现过,证明平方和计算进入了无限循环,永远无法得到1,此时会进入if块直接返回false,判定输入数字不是快乐数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 07:18:16