繁体   English   中英

类型不匹配错误:Scala

[英]Type mismatch error : Scala

我正在尝试编写一个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]

对于我在做什么错的任何建议,我们将不胜感激。

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) 那是可取的行为吗?

我会说最好避免使用可变状态,并尝试使用高阶函数解决此问题。 例如,这是一个内衬,可以为您完成!

def isPrime(num: Int): Boolean = (2 to num) forall (x => num % x != 0)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM