我有一些航班/乘客数据,我试图找到前往英国之前乘客去过的最大国家/地区。
为了使问题简单起见,我将问题缩小到特定情况。
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天)。解决该问题的任何帮助将不胜感激。
答案 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)