2016-12-29 41 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注释,以确保它会与尾调用优化的编译。