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
相关产品推荐
相关产品推荐

