2016-11-28 3 views
0

以下は私のスカラコードですが、13行目は "欠落しているパラメータタイプ"と言うエラーがあります。スカラーコードで私のforeachの問題は何ですか

class OneAway { 

    def isOneAway(s1:String, s2:String):Boolean={ 
    if(s1.equals(s2)) 
     return true 
    else if(s1.length > s2.length + 1 || s1.length < s2.length - 1) 
     return false 
    else 
    { 
     var count:Int=0 
    s1.chars().forEach(a=>{ 
     if(a!=s2.charAt(count)){   
      return s2.substring(count+1).equals(s1.substring(count)) || s1.substring(count+1).equals(s2.substring(count)) 
     } 
     count=count+1 
     } 
     )  
     return true 
    } 

    } 
} 

答えて

5

foreachはすべて小文字で、内部に中括弧をなくしてください。

また、質問していなくても...これはスカラーコードを書く恐ろしい方法です。あなたが実行するケースの99%では、戻り値、可変状態、および(例外を除いて)シーケンスへのインデックス付きアクセスの使用を避けたいと思うでしょう。 コードによっては、場合によっては不正なインデックス例外がスローされることもあります。

@tailrec 
def isOneAway(s1: String, s2: String): Boolean = (s1.headOption, s2.headOption) match { 
    case (None, None) => true 
    case (a,b) if a == b => isOneAway(s1.tail, s2.tail) 
    case _ if s1.length == s2.length + 1 => s1.tail == s2 
    case _ if s2.length == s1.length + 1 => s2.tail == s1   
    case _ => false 
} 
+0

これはScalaの世界では、より正確な答えです:あなたはScalaでやりたい

適切な方法は、このようなものになるだろう。ほとんどの場合、if構造体を避ける必要があります。 – Pavel

+0

最後の3つのケースの意味は分かりますか?ありがとう。 – sweetyBaby

+0

あなたには何が出ていますか? 2番目の文字列が短い場合は、1番目の文字を削除し、残りの文字を比較します。最初の文字列が1つ短絡されている場合は、最初の文字列を削除し、残りの文字列を比較します。さもなければ、長さは1だけずれないので、falseを返します。 – Dima

4

s1.foreach(a=>{....}) 

文字(あるべき)はjava8からであり、あなたがスカラを使用しています。 Stringオブジェクトに対してforeachを使用するだけで済みます。

関連する問題