你应该把你的结果放在一个集合中,因为:
- 可以有多个结果,所以它必须是一些集合
- 您不想重复,Set 会为您消除它们
所以这样的事情应该有效:
def roots(a : Double, b : Double, c: Double)= {
if (b*b-4.0*a*c >= 0) {
Set(1,-1).map(-b + _ * math.sqrt(b*b-4.0*a*c))
}else{
Set()
}
}
val a = readDouble
val b = readDouble
val c = readDouble
println(roots(a,b,c))
使用此函数,您可以获得以下结果:
scala> roots(2,3,4)
res4: scala.collection.immutable.Set[_ <: Double] = Set()
scala> roots(-2,3,4)
res5: scala.collection.immutable.Set[_ <: Double] = Set(3.4031242374328485, -9.403124237432849)
scala> roots(2,0,0)
res6: scala.collection.immutable.Set[_ <: Double] = Set(0.0)
对于复数,您可以使用spire。把上面的代码稍微改一下:
import spire.implicits._
import spire.math._
def roots(a : Complex[Double], b : Complex[Double], c: Complex[Double]) =
Set(1,-1).map(-b + _ * (b*b-4.0*a*c).sqrt)