2015-04-23 99 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 
相关问题