Scala for循环错误

时间:2017-10-22 15:35:33

标签: scala

我试图基于lat和long给出循环矩阵但是,当我尝试构建时,我得到了这个错误。

  

错误:(55,21)值foreach不是Range.Partial的成员[Double,scala.collection.immutable.NumericRange [Double]]             for(i< - lat0 to lat1){

     

错误:(56,23)值foreach不是Range.Partial的成员[Double,scala.collection.immutable.NumericRange [Double]]               for(k < - lon0 to lon1){

代码:

  // lat0,lat1,lon0,lon1 are parameters that are type Double
  var count = 0.0;
  var sum = 0.0;

  for(i <- lat0 to lat1){
    for(k <- lon0 to lon1){
      if(this.data(i)(k) != this.noData){
        count += 1.0
        sum += data(i)(k).toDouble
      }
    }
  }

2 个答案:

答案 0 :(得分:0)

此处的问题是您的lat0lat1lon0lon1是双打。

如果您执行[Int] to [Int],它将返回Range.Inclusive,其中Iterable实施foreach方法http://www.scala-lang.org/api/2.9.0/scala/collection/immutable/Range $$ Inclusive.html

但是,如果您执行[Double] to [Double],则会返回Range.Partial,而不是Iterablehttp://www.scala-lang.org/api/2.9.0/scala/collection/immutable/Range $$ Partial.html

如果您需要使用for循环,请生成一些可迭代的集合,例如Seq

答案 1 :(得分:0)

您需要选择一个迭代Double范围的步骤,例如使用by

  for (i <- lat0 to lat1 by 0.1) {
    for (k <- lon0 to lon1 by 0.1) {
      if (this.data(i)(k) != this.noData) {
        count += 1.0
        sum += data(i)(k).toDouble
      }
    }
  }