вызвать определение в блоке - PullRequest
2 голосов
/ 12 октября 2011

Если есть какой-либо способ вызвать 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) )

в конце, я хочу получить сумму факториала каждой цифры

Но похоже, что defне вернуть значение, каждый раз 0

Как это исправить?

Спасибо!

1 Ответ

7 голосов
/ 12 октября 2011

Проблема на самом деле не имеет ничего общего со Scala; ваш код и ваш def в порядке. Проблема с toInt:

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

toInt на самом деле не преобразует его как десятичную цифру, а как значение символа Unicode (ish?). Они производят очень большие числа, которые выходят за рамки того, с чем factor может справиться:

scala> factor(6)
res8: Int = 720

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

scala> factor(100)
res10: Int = 0

Так что вместо этого используйте (спасибо Луиджи)

x.asDigit
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...