2016-12-29 8 views
0
object perMissing { 
    def solution(A: Array[Int]): Int = { 
     def findMissing(i: Int, L: List[Int]): Int = { 
      if (L.isEmpty || L.head != i+1) { 
       i+1 
       println(i+1)} 
      else findMissing(i+1, L.tail) 
     } 
     if (A.length == 0) 1 
     else findMissing(0, A.toList.sorted) 

    } 
    solution(Array(2,3,1,5)) 
} 

私はScalaの世界では初めてです。私はPythonとCの世界から来ています。オブジェクト内の整数値をスカラーでどのように印刷しますか?

整数値を出力するにはどうすればいいですか?デバッグ用?たとえば、すべての反復でiの値を確認したいとします。

scalacを使用してコードをコンパイルし、scalaを使用して実行します。

+0

あなたは 'println(i)'を意味しますか? 'printf'に似ていますか? –

+0

はい、私はprintfと似ています... はいくつかの変更を加えました。それは私がそれを実行する方法で、助けにはなりません – tandem

+0

'def solution'の先頭に' println'を追加して配列を印刷すると、つまり、 'A.foreach(println)'、コンソールに出力が表示されますか? –

答えて

1

findMissing関数の署名によれば、Intが返されます。しかし、その関数の実装を見ると、コードパスの1つ(else部分)のみがIntを返します。printlnへの呼び出しは(Unit以外の)何も返しません。if部分は何も返しません特定のコードブロックの最後の行。この問題を解決するには、単にブロックの最後にそれを置くことによって増加した値を返します。

def findMissing(i: Int, l: List[Int]): Int = { 
    val inc = i + 1 
    if (l.isEmpty || l.head != inc) { 
    println(inc) 
    inc 
    } 
    else findMissing(inc, l.tail) 
} 

findMissingテール再帰的であるので、あなたは、さらに、それは末尾呼び出しの最適化でコンパイルされます確実にするために@tailrecでそれに注釈を付けることができ。

関連する問題