开发者

call a def within a block

If there is any way to call a def from a block

def factor (n: Int) : Int = if (n == 0 ) 1 else  n * factor(n-1)

val i = 1000

i.toString.foreach ( x => sum +=开发者_JAVA技巧 factor(x.toInt) )

at the end I want to get the sum of factorial of every digit

But it seems like def doesn't return a value, everytime is 0

How to fix it?

Thanks!


The problem actually has nothing to do with Scala per se; your code and your def are fine. The issue is with toInt:

scala> '3'.toInt
res7: Int = 51

toInt doesn't actually convert it as a decimal digit, but as a unicode (ish?) character value. These are producing very large numbers which go beyond what factor can handle:

scala> factor(6)
res8: Int = 720

scala> factor(20)
res9: Int = -2102132736

scala> factor(100)
res10: Int = 0

So instead use (thanks to Luigi)

x.asDigit
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜