Scala for循环值示例

时间:2015-08-22 03:14:41

标签: scala for-loop

如何在Scala中解决这个问题?在For循环中执行。

低于1000的3和5的所有倍数的总和;

示例:1 * 3 + 2 * 5 + 3 * 3 + 4 * 5 + 5 * 3 + 6 * 5 ...所以999 * 3 + 1000 * 5 =多少钱?

2 个答案:

答案 0 :(得分:1)

我不认为1000 * 5是1000以下的5的倍数.1000 * 5是5000,不低于1000.

看起来你想要的是:

(1 to 1000).filter(x => x % 3 = 0 || x % 5 == 0).sum

哪个不使用“for-loop”。很多人都会在这样的术语中畏缩,scala并没有真正的for-loops。如果必须使用for构造,也许你会写

 (for (x <- 1 to 1000 if x % 3 == 0 || x % 5 == 0) yield x).sum

与上述完全相同。

你也可以(虽然我不推荐)使用变异:

var s = 0
for { x <- 1 to 1000 } { if(x % 3 == 0 || x % 5 == 0) s += x }
s

也可能是

var s = 0
for { x <- 1 to 1000 if (x % 3 == 0 || x % 5 == 0) } { s += x }
s

答案 1 :(得分:0)

如果你想使用函数式编程的原理,你可以使用递归 - 更好的是你可以使用尾递归(很抱歉,这个例子不是那么好,但它已经很晚了)。

def calc(factorB:Int):Int = {
    if(factorB+1 >= 1000)
        3*factorB+5*(factorB+1)
    else
        3*factorB+5*(factorB+1)+calc(factorB+2)
}

在for循环中你可以像

那样做
var result = 0
for(i <- 1 to 1000){
    result += i*(i%2==0?5:3)
}

for循环结果产生计算值。缺点是你使用的是var而不是val。我不确定声明i%2 == 0?5:3是否在scala中有效,但我不知道为什么它不应该出现。