2014-06-16 3 views
-1

Я довольно новичок в Scala и должен написать программу, которая вычисляет среднее значение данного списка целых чисел.Scala - foreach не является членом Int

Однако, я всегда получаю ошибку:

foreach is not a member of Int.

знает, как решить кто-нибудь из вас это? Вот мой код:

var measureResults = List(100, 36, 54, 4, 22, 37, 86, 20, 3000) 

var averageResult = getAverage(measureResults) 

println(averageResult) 

def getAverage(measureResults: List[Int]): Double = { 
    var entryList = listOfValidElements(measureResults) 
    var average = entryList(0) 
    for (element <- average){ 
     average =+ 1 
     var trueAverage = average/length(entryList) 
     return trueAverage 
    } 
} 
+1

1) Пожалуйста, укажите, что код. 2) Пожалуйста, укажите ошибку в своем вопросе. 3) 'average' - это, вероятно,' Int', в котором '<-' не имеет смысла. 4) Вычисление среднего значения 'L' производится посредством' sum (L)/len (L) '. –

+3

Любая причина, по которой вы вычисляете среднее значение, используя Java-подобный код с изменяемыми переменными и 'for', вместо того, чтобы просто писать' list.sum/list.size'? –

+0

Если вы хотите рассчитать avg. вы должны добавить все элементы друг к другу и разделить их по их счету. –

ответ

2

На самом деле ответ на вопрос, как спросил

However I always get the error: foreach is not a member of Int.

Does anybody of you know how to solve this?

в вас код здесь:

var average = entryList(0) 
for (element <- average){ 

вы берете первую запись в entryList, который является Int. Затем попробуйте перебрать его, что не имеет никакого смысла, и вызывает ошибку вы получаете

Вы, вероятно, имел в виду что-то вроде

var average = 0 
for (element <- entryList) { 

average += element не average += 1)

но другие указали, есть намного лучшие способы расчета этого в Scala

4

Более Scala-МОГ подход,

def average(list: List[Int]): Double = { 
    list.sum.toDouble/list.size 
} 

Примечания нет возврата заявления, то последнее выражение возвращается; и никакая изменчивость не задействована. Передача суммы в Double обеспечивает деление и результат с плавающей запятой. Имя метода omits получает префикс для краткости и, в конечном итоге, передается с использованием метода не-геттера.

Из этих примечаний var measureResults = List(1,2,3) может стать неизменным, val measureResults = List(1,2,3).

+1

Более масштабируемый подход: 'def average (list: List [Int]): Double = list.sum.toDouble/list.size' :-) –

+0

Спасибо, он отлично работает сейчас! – chritschl

+0

Прискорбно, что это отмечено как ответ, поскольку он даже не пытается ответить на вопрос (и он отвечает на другой вопрос, который следует задать более прямо/кратко). –

Смежные вопросы