2015-04-23 100 views
2

我在試圖創建一個返回數組中偶數值數的函數。到目前爲止,我有下面的代碼,但它不工作:如何創建一個返回數組中偶數值的scala函數?

(a: Array[Int]): Int = { 
    var howManyEven = 0 
    for(i <-0 to a.length) { 
    if(a(i)%2==0){ 
     howManyEven+= 1 
    } 
    howManyEven 
    } 

此外,由於某些原因,我難倒如何返回數組的奇值的數量。我的方法關閉了嗎?我想我只是難以用什麼方法來產生我想要的輸出。

+0

我在斯卡拉專家,但清洗你的代碼之後,它看起來像你缺少一個大括號實現這一目標。 – Jonathan

回答

7

您有一個錯誤的錯誤(忽略其他拼寫錯誤和缺少的信息),因爲您試圖從0a.length。但是如果長度爲10,那麼你將從0到10,這是11個指數。它應該是a.length - 1

你可能避免的off-by-一個錯誤使用功能的方法來思考。同樣的事情可以用集合庫中的標準方法在一行中完成。

def howManyEven(a: Array[Int]): Int = a.count(_ % 2 == 0) 

scala> howManyEven(Array(1, 2, 3, 4, 6, 8, 9, 10, 11)) 
res1: Int = 5 

count在集合庫計數集合中滿足Boolean屬性的元素的方法。在這種情況下,檢查一個元素是否是偶數。

我建議有對List可用的方法讀取,例如。 Scala集合庫非常豐富,並且具有幾乎任何你想要做的事情的方法。這只是尋找正確的一個(或其組合)的問題。正如你所看到的,設置循環和使用可變變量的Java方法往往容易出錯,而在Scala中最好避免這種情況。

0

您還可以通過使用filtergroupBy

def howManyEven(a: Array[Int]): Int = a.filter(_%2==0).size 

def howManyEven(a: Array[Int]): Int = a.groupBy(_ % 2 == 0).get(true).get.size 
相關問題