2014-06-16 52 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)'平均值'可能是一個'Int',至少'<--'沒有意義。 4)計算'L'的平均值由'sum(L)/ len(L)'完成。 –

+3

你爲什麼要用可變變量和for循環代替只寫'list.sum/list.size'的Java類代碼來計算平均值? –

+0

如果你想計算平均。您必須將所有元素相互添加並按照他們的計數進行劃分。 –

回答

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中的第一項,這是一個詮釋。然後嘗試遍歷它,這沒有任何意義,而導致錯誤你

你可能是指像

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

(和average += elementaverage += 1

但作爲其他人指出,在Scala中有更好的計算方法

4

更斯卡拉十歲上下的做法,

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

注意沒有return語句,返回最後一個表達式;並且不涉及可變性。將總和轉換爲Double可確保進行浮點除法和結果。該方法的名稱省略了得到前綴爲簡潔,並最終傳達與非吸氣劑類方法。

從這些說明中,var measureResults = List(1,2,3)可能會變得不可變,val measureResults = List(1,2,3)

+1

一個更加scalish的方法:'def average(list:List [Int]):Double = list.sum.toDouble/list.size' :-) –

+0

非常感謝你,它現在完美了! – chritschl

+0

不幸的是,這被標記爲答案,因爲它甚至沒有試圖回答這個問題(並且它回答了應該更直接/簡潔地提出的另一個問題)。 –

相關問題