«ошибка: прямая ссылка распространяется на определение счетчика переменных» - PullRequest
1 голос
/ 03 ноября 2019

У меня есть некоторые данные о рейсе / пассажире, и я пытаюсь найти максимальное количество стран, в которых был пассажир, ДО того, как отправиться в Великобританию.

Я сузил проблему до конкретного случая, чтобы сохранить еепросто.

для пассажира A

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

Мой подход заключался в циклическом просмотре списка ts (сокращение от последовательности поездок). * когда значение! = "uk", то счетчик увеличивается на 1 *, как только мы достигаем случая, когда значение = "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 голосов
/ 03 ноября 2019

Исправлено для вас:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...