我正在尝试编写一个scala程序来查找素数,并编写了以下代码:
object primenumber {
import scala.collection.mutable
import scala.collection.mutable.ArrayBuffer
def primenumber_func(raw_arr: Array[Int]){
var raw_arbuf = raw_arr.toBuffer
var del_arr = new ArrayBuffer[Int]()
for(ctx <- 2 to (raw_arbuf.max-1)){
del_arr = raw_arbuf.filter(_%ctx == 0)
raw_arbuf = raw_arbuf diff del_arr
}
println(raw_arbuf)
}
}
并面临以下错误:
<console>:18: error: type mismatch;
found : scala.collection.mutable.Buffer[Int]
required: scala.collection.mutable.ArrayBuffer[Int]
非常感谢任何关于我做错事的建议。
答案 0 :(得分:0)
写
var del_arr: mutable.Buffer[Int] = new ArrayBuffer[Int]()
而不仅仅是
var del_arr = new ArrayBuffer[Int]()
否则Scala编译器会将del_arr
的类型推断为实现类型ArrayBuffer[Int]
而不是特征类型Buffer[Int]
,filter
返回Buffer[Int]
,这样你就可以'重新分配del_arr
。
顺便说一下,primenumber_func((1 to 100).toArray)
会产生ArrayBuffer(1)
。这是理想的行为吗?
答案 1 :(得分:0)
我想说更好地避免使用可变状态并尝试使用更高阶函数来解决这个问题。例如,这是一个可以为你做这个的衬垫!
def isPrime(num: Int): Boolean = (2 to num) forall (x => num % x != 0)