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

それは本当のはずだった。カウントが5になると、途中で終了するはずだったので、に等しくなりnます。

私は何が間違っているのですか?

returnScalaでは、ステートメントでメソッドを途中で終了することはできませんか?

4

1 に答える 1

4

if (letter == "*")char と string を比較しているため、常に false になり、評価count += 1されることはありません代わり
に書く必要がありますif (letter == '*')

実際には、もっと慣用的なコードは次のようになります。

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