我刚刚开始Scala,所以请耐心等待。
我正在编写一个方法,根据给定列表中的“*”数返回布尔值。
def stars(n: Int, chars: List[Char]): Boolean = {
var count = 0
chars.foreach{ letter =>
if (letter == "*") {
count += 1
}
if (count == n) {
return true
}
}
false
} //> stars: (n: Int, chars: List[Char])Boolean
stars(5, "******".toList) //> res12: Boolean = false
那应该是真的。因为它应该在计数变为5时过早结束,这等于n
。
我做错了什么?
scala是否允许使用return
语句提前结束方法?
答案 0 :(得分:4)
在if (letter == "*")
中,您要将字符串与字符串进行比较,从而不断变为虚假,而count += 1
永远不会被评估
你必须写if (letter == '*')
而不是
实际上,更惯用的代码是:
def stars(n: Int, chars: List[Char]): Boolean = {
n == chars.count(c => c == '*')
}