Распакуйте список кортежей, чтобы убедиться, что среднее значение в каждом кортеже не превышает определенного значения. - PullRequest
0 голосов
/ 13 марта 2020

Я пытался распаковать каждый кортеж в списке кортежей и проверить, чтобы среднее значение в каждом кортеже не превышало определенную величину в уравнении. Я продолжаю получать ") ожидаемый, но => найденный." Я уже пытаюсь продвинуть свои знания, пытаясь это сделать, поэтому я понятия не имею, что не так?

def howmuch(m: Int, n: Int): List[Any] = {
  val a = ((m-1) to (n-1)).toList
  val b = a.map(i =>
    if (((7 / 9.0 * i + 1 / 9.0) % 1) == 0) (7*i+2,i,(7 / 9.0 * i + 1 / 9.0).toInt) else n+1)

  val c = b.map((i._1,i._2,i._3) => if (9*(i._3)+1 <=n) (i._1,i._2,i._3) else n+1)
  c
}

1 Ответ

0 голосов
/ 13 марта 2020

Первое правило if / else заключается в том, что типы обеих сторон должны совпадать.

Давайте рассмотрим первую (переформатированную, чтобы ее было легче читать).

a.map(i =>
    if (((7 / 9.0 * i + 1 / 9.0) % 1) == 0)
      (7*i+2, i, (7 / 9.0 * i + 1 / 9.0).toInt) //(Int,Int,Int) tuple
    else n+1                                    //Int
  )

Так что если a что-то вроде List(5,6,7), то результат будет List(8, (37,5,4), 8). Это список типа List[Any]. Это очень плохой знак. Всякий раз, когда вы встречаете тип Any в Scala коде, он должен поднять красный флаг.

Затем вы пытаетесь map() над этим списком. Вы не только неправильно понимаете синтаксис, но и каждый элемент имеет тип Any. Вы не можете обращаться с каждым элементом как с кортежем, потому что это не Tuple, это Any. Вы не можете добавить 1 к элементу, потому что это не Int, а Any.

Время назад go и переосмысление этого с самого начала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...