3

我刚刚开始使用 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

那应该返回true。因为它应该在计数变为 5 时提前结束,它等于n.

我究竟做错了什么?

scala 不允许使用return语句过早地结束方法吗?

4

1 回答 1

4

if (letter == "*")您将 char 与 string 进行比较时,因此不断变得错误并且您count += 1从未被评估过
您必须if (letter == '*')改写

实际上,更惯用的代码是:

def stars(n: Int, chars: List[Char]): Boolean = {
  n == chars.count(c => c == '*')
}
于 2012-09-28T00:53:01.617 回答