【发布时间】:2017-12-27 12:47:22
【问题描述】:
我对 Scala 非常陌生,我必须找到 [i;j] 范围内数字的质数。 这就是我填充流的方式:
val stream = (i to j).toStream
然后我调用这个应该找到素数的函数:
def findPrimes(s: Stream[Int]): Stream[Int] = {
println("HEAD: " + s.head)
return findPrimes(s.tail)
// s.head #:: findPrimes(s.tail.filter( _ % s.head != 0 ))
}
将流输出到控制台,我很惊讶为什么会出现异常:
Exception in thread "main" java.util.NoSuchElementException: head of empty stream
at scala.collection.immutable.Stream$Empty$.head(Stream.scala:1104)
at scala.collection.immutable.Stream$Empty$.head(Stream.scala:1102)
at com.example.anna.app.HelloWorld$.findPrimes(HelloWorld.scala:43)
STREAM SIZE IS 100
at com.example.anna.app.HelloWorld$.prime(HelloWorld.scala:32)
HEAD: 1
at com.example.anna.app.HelloWorld$.delayedEndpoint$com$example$anna$app$HelloWorld$1(HelloWorld.scala:11)
HEAD: 2
HEAD: 3
at com.example.anna.app.HelloWorld$delayedInit$body.apply(HelloWorld.scala:3)
HEAD: 4
at scala.Function0.apply$mcV$sp(Function0.scala:34)
HEAD: 5
HEAD: 6
at scala.Function0.apply$mcV$sp$(Function0.scala:34)
HEAD: 7
at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
HEAD: 8
HEAD: 9
at scala.App.$anonfun$main$1$adapted(App.scala:76)
HEAD: 10
HEAD: 11
at scala.collection.immutable.List.foreach(List.scala:389)
HEAD: 12
at scala.App.main(App.scala:76)
HEAD: 13
at scala.App.main$(App.scala:74)
HEAD: 14
HEAD: 15
at com.example.anna.app.HelloWorld$.main(HelloWorld.scala:3)
HEAD: 16
at com.example.anna.app.HelloWorld.main(HelloWorld.scala)
HEAD: 17
从 17 开始到结束,没有一个例外。 而且这条注释行也不起作用 - 它会引发相同的异常。
任何帮助和建议将不胜感激。
【问题讨论】: