Сумма элементов массива через цикл while - PullRequest
0 голосов
/ 17 мая 2019

Я попытался суммировать элементы массива через цикл while, используя следующий код

def sum(input: Array[Int]): Int = {
  var i=0;
  while(i<input.length) {
    sum=i+input(i);
    i=i+1;
  }
  sum
}

, однако он выдает ошибку

<console>:17: error: reassignment to val
  sum= (i+input(i))
     ^
<console>:21: error: missing argument list for method 
sum Unapplied methods are only converted to functions when a function type is expected.
You can make this conversion explicit by writing `sum _` or `sum(_)` instead of `sum`.

Я также пытался с возвратом sum()но я получил другую ошибку

<console>:17: error: reassignment to val
   sum=i+input(i);
      ^
<console>:20: error: not enough arguments for method sum: (input: Array[Int])Int.
Unspecified value parameter input.sum()

Как я могу суммировать элементы массива, используя цикл while?

Ответы [ 3 ]

3 голосов
/ 17 мая 2019

Я думаю, что вы пытаетесь сделать следующее:


def sum(input:Array[Int]):Int = {
  var i, res = 0;
  while(i < input.length) {
  res = res + input(i); // and not res=i+input(i);
   i = i + 1;
  }
  res
}

Это в основном использует переменную-накопитель res, которая накапливает различные значения Array, вы не можете использовать sum это имя метода для этого.

0 голосов
/ 18 мая 2019

Вот несколько альтернатив суммированию списка без использования цикла while или переменных

val l = List(1,2,3,4,5)

l.reduce((a,b) => a + b)
l.foldLeft(0)((a,b) => a + b)

def sum(l: List[Int]): Int = l match {
  case Nil => 0
  case head :: tail => head + sum(tail)
}

sum(l)

где все они должны составить до 15.

0 голосов
/ 17 мая 2019
def sum(input: Array[Int]): Int = input.sum

Если для чего-то есть встроенная подпрограмма, то лучше ее использовать.Если это всего лишь упражнение по программированию, вам не следует использовать var и while, лучше использовать foldLeft или рекурсивную процедуру.

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