文字列のかっこの数が有効かどうかを確認するための再帰的メソッドを実装しました。ここでは、コードScalaの特定の条件に基づいて値を計算する方法
def balance(chars: List[Char]): Boolean = {
@tailrec
def isValid(newChars: List[Char], difference: Int): Boolean = {
if (newChars.isEmpty) difference == 0
else if (difference < 0) false
else {
var newDifference = difference // Scala IDE gives warning here
if (newChars.head == '(') newDifference = difference + 1
else if (newChars.head == ')') newDifference = difference - 1
isValid(newChars.tail, newDifference)
}
}
isValid(chars, 0)
}
私は、次のテストケースのために上記のコードをテストし、それはだから私は唯一の場合/他のはしごを改善するために探しています正常に動作です。コードで述べたように
println("Testing parenthesis balancing")
assert(balance("(Sachin is learning (scala) and (spark))".toList))
assert(!balance("(Invalid))(expression)".toList))
assert(balance("".toList))
assert(balance("()()".toList))
assert(!balance("{())}{()}".toList))
、ScalaのIDEは
を言ってその行に文句を言う、私は使用しなくても
newDifference
の値を計算する方法が本当にわからない変更可能なローカル変数
を避けてくださいif/else。私が見ることができる他のオプションは、newDifferenceの計算値を使ってif/elseラダーで直接isValid
メソッドを呼び出すことです。
私はまだScalaを学んでいますので、ローカル変数(または他の警告)に変更を加えずにこのコードを書くことができる可能性があります。あなたが書くことができ
+1あなたの2番目の例では、マッチパターンが本当に素晴らしく、これが私が探していたものです。ありがとう@Dogbert – sachinjain024