我在Scala的初学者级别,我正在尝试以下代码:
var i: Int = 0 for (i <- 0 to 10) { if (i == 2) { i += 1 } println(i) }
当我增加i
编译器说Value += is not member of Int
.
你要宣告i
两次,一次在外部范围,一次在内部.你的理解是看内在的i
,这是一个val
,而不是一个var
,从而影响了外部的宣言.
绑定到另一个名称:
var counter: Int = 0 for (i <- 0 to 10) { if (i == 2) { counter += 1 } println(counter) }
请注意,您可以在不声明外部变量的情况下执行此操作,使用count
:
val count = (0 to 10).count(i => i == 2) println(count)
根据您的评论,我了解您要打印除了以外的所有数字2
.为此你需要否定你的条件:
if (i != 2) { counter += 1 }
或者,如果您只想过滤掉2:
(0 to 10).filter(_ != 2).foreach(println)
从你的评论来看,它看起来像一个while
循环更适合你想要实现的目标:
var i = 0 while (i < fruits.length) { if (fruits(i) == "Banana") { i += 1 println(i + " " + fruits(i)) } else if (fruits(i) == "Orange") { i += 1 println(i + " " + fruits(i)) } }
但是这段代码会遇到无限循环,因为只有i
满足条件才会增加.除此之外,既然你正在做i + 1
,如果最后一个元素等于"Banana"或"Orange",你可能会超出界限,所以你可能想重新考虑你正在做的事情.你可能会碰到一个