2016-12-29 42 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)) 
} 

我是新來的斯卡拉世界。我來自Python和C世界。如何在scala中的對象內打印整數值?

我們如何打印整數值,例如:進行調試?例如,如果我想在每次迭代中看到i的值。

我使用scalac編譯我的代碼並使用scala運行它。

+0

你的意思是'println(i)'?類似於'printf'? –

+0

是的,我的意思是類似於printf ... 做了一些改變..這就是我如何運行它,它並沒有幫助我 – tandem

+0

如果你在'def solution'的開頭添加一個'println'來打印數組,即'A.foreach(println)',你看到控制檯中的輸出嗎? –

回答

1

根據您的findMissing函數的簽名,應返回Int。但是,如果您查看該函數的實現,則只有一個代碼路徑(即else部分)返回Int - 另一方面,if部分不會返回任何內容(除Unit之外),因爲對println的調用是該特定代碼塊的最後一行。要解決此問題,只需將它放在塊的最後返回的增加值:

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註釋,以確保它會與尾調用優化的編譯。