如何创建一个scala函数,返回数组中偶数值的数量?

时间:2015-04-23 02:06:23

标签: scala

我尝试创建一个返回数组中偶数值数的函数。到目前为止,我有以下代码,但它不起作用:

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

另外,由于某些原因,我很难知道如何返回数组中奇数值的数量。我的方法关闭了吗?我想我只是想知道用什么方法来生成我想要的输出。

2 个答案:

答案 0 :(得分:7)

您有一个错误的错误(忽略其他错别字和丢失的信息),因为您尝试从0转到a.length。但如果长度为10,那么你将从0到10,即11个指数。它应该是a.length - 1

您可以避免使用功能方法来解释一个错误。使用集合库中的标准方法可以在一行中完成同样的事情。

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集合库非常丰富,并且几乎可以为您提供任何方法。这只是找到合适的(或组合)的问题。正如您所看到的,设置for循环和使用可变变量的Java方法往往容易出错,而在Scala中最好避免这种情况。

答案 1 :(得分: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