2017-03-16 1 views
0

Scalaを使用して二次方程式の根を見つけるプログラムを作成しようとしています。入力は、文字列としてax^2 + bx + cの形式の2次方程式(例えば、5x^2 + 2x + 3)でなければなりません。Scalaで文字列として入力された二項式の係数を抽出する

私は根の計算をコード化することができましたが、入力から係数を抽出することができませんでした。ここで私は、これまでの係数を抽出するために書いたコードは次のとおりです。正規表現と

def getCoef(poly: String) = { 
    var aT: String = "" 
    var bT: String = "" 
    var cT: String = "" 
    var x: Int = 2 
    for (i <- poly.length - 1 to 0) { 
    val t: String = poly(i).toString 
    if (x == 2) { 
     if (t forall Character.isDigit) aT = aT + t(i) 
     else if (t == "^") {i = i + 1; x = 1} 
    } 
    else if (x == 1) { 
     if (t forall Character.isDigit) bT = bT + t(i) 
     else if (t == "+" || t == "-") x = 0 
    } 
    else if (x == 0) { 
     if (t forall Character.isDigit) cT = cT + t(i) 
    } 
    val a: Int = aT.toInt 
    val b: Int = bT.toInt 
    val c: Int = cT.toInt 
    (a, b, c) 
    } 
} 
+0

正規表現の使用について考えましたか?あなたの入力文字列がどのくらい複雑になっているかは分かりませんが、問題は解析されており、正規表現や多分Scalaパーサーコンビネータのような優れた解決策があります。 – stholzm

+0

str.split( 'x')。map(v => v.replace( "^ 2"、 ""))map(_。toDouble) – FatTail

+0

もしあなたが正規表現を大切にしていて、説明する。 – FatTail

答えて

0

シンプルなソリューション:

def getCoef(poly: String) = { 
    val polyPattern = """(\d+)x\^2\+(\d+)x\+(\d+)""".r 
    val matcher = polyPattern.findFirstMatchIn(poly).get 
    (matcher.group(1).toInt, matcher.group(2).toInt, matcher.group(3).toInt) 
} 

は、すべての場合(例:マイナス)を処理せず、入力がない場合、単にエラーをスローしますパターンにマッチするものではありませんが、それはあなたに行くべきです。

関連する問題