“错误:前向引用超出了变量计数器的定义”

时间:2019-11-03 16:54:30

标签: scala apache-spark iteration

我有一些航班/乘客数据,我试图找到前往英国之前乘客去过的最大国家/地区。

为了使问题简单起见,我将问题缩小到特定情况。

A乘客

val ts = List("il", "ar", "ca", "bm", "au", "jo", "uk", "jo", "th", "uk", "ca", "cn", "sg", "il")

我的方法是遍历列表ts(行程序列的缩写)。 *当值!=“ uk”时,计数器加1 *一旦达到value =“ uk”的情况,则将该计数器值存储到run_length中,然后重置计数器。 *遍历整个列表后,我们应该找到run_length的最大值。

从理论上讲,这应该为旅客提供前往英国之前的最大停留机会。

但是我的代码出错。

import scala.collection.mutable.ArrayBuffer

var counter = 0
var runs: ArrayBuffer[Int] = ArrayBuffer()
val ts = List("il", "ar", "ca", "bm", "au", "jo", "uk", "jo", "th", "uk", "ca", "cn", "sg", "il")


for (i <- ts){
    if (i != "uk"){
        counter += 1
    }
    else {
        runs += counter
        var counter = 0
    }
}

val max_run = runs.max
println(max_run)

我得到一个错误:

<console>:38: error: forward reference extends over definition of variable counter 
     runs += counter

我期望得到值6,因为“ uk”之前的最大元素数为6。

我是Scala的新手(到目前为止,仅做了2天)。解决该问题的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

为您修复了该问题:

import scala.collection.mutable.ArrayBuffer

var counter = 0
var runs: ArrayBuffer[Int] = ArrayBuffer()
val ts = List("il", "ar", "ca", "bm", "au", "jo", "uk", "jo", "th", "uk", "ca", "cn", "sg", "il")


for (i <- ts){
    if (i != "uk"){
        counter += 1
    }
    else {
        runs += counter
        counter = 0 // <= this line is the fix
    }
}

val max_run = runs.max
println(max_run)