我正在练习“Scala for the Impatient”,我发现根据我从Int和BigInt中选择的var类型得到两个不同的结果。
我认为我忽略了一些微不足道但却不知道的是什么?任何帮助,将不胜感激。感谢。为什么我会在以下两个代码段中得到两个不同的结果?
var mul:BigInt= 1
for(i<-"Hello") mul = mul * i
print(mul) // mul = 9415087488
var mul:Int = 1
for(i<-"Hello") mul = mul * i
print(mul) // mul = 825152896
答案 0 :(得分:0)
只是为了在这里得到答案的答案,所以问题可以解决......
1)BigInt
大于Int
;具体来说,它比Int.MaxValue
大。你的第二个例子是溢出的,9415087488
是正确答案。
2)在Scala中强烈建议不要使用像这样的变量。更“实用”的解决方案是将字符映射到BigInts,然后使用.product
"Hello".map(BigInt(_)).product