如果有任何方法可以从块中调用def
def factor (n: Int) : Int = if (n == 0 ) 1 else n * factor(n-1)
val i = 1000
i.toString.foreach ( x => sum += factor(x.toInt) )
Run Code Online (Sandbox Code Playgroud)
最后我想得到每个数字的阶乘之和
但似乎def没有返回值,每次都是0
怎么解决?
谢谢!
这个问题实际上与Scala本身无关; 你的代码和你的def都没事.问题在于toInt:
scala> '3'.toInt
res7: Int = 51
Run Code Online (Sandbox Code Playgroud)
toInt实际上并不是将其转换为十进制数字,而是作为unicode(ish?)字符值.这些产生了非常大的数字,超出了factor可以处理的范围:
scala> factor(6)
res8: Int = 720
scala> factor(20)
res9: Int = -2102132736
scala> factor(100)
res10: Int = 0
Run Code Online (Sandbox Code Playgroud)
所以改为使用(感谢Luigi)
x.asDigit
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
144 次 |
| 最近记录: |