首页 > 解决方案 > Scala - 有条件地对列表中的元素求和

问题描述

我正在尝试使用列表解决初学者问题,但找不到帮助我使其工作的示例。我得到了一个正整数和负整数列表(AccountHistory),我需要检查这个列表中的负整数是否曾经超过-1000。我希望我的代码可以使用新引入的辅助函数,如下所示:

def checkAccount(account: AccountHistory): Boolean = {
def helper(i: AccountHistory): Int = {
  var total = 0
  i.collect{case x if x < 0 => Math.abs(x) + total}
  return total
}
if (helper(account) >1000) true else false
}

但它不起作用。请帮助我以错误的方法找到我的错误或问题。

编辑:预先给定的测试包括

assert(checkAccount(List(10,-5,20)))
assert(!checkAccount(List(-1000,-1)))

因此,如果 assert 期望为真,那么我这样解决它的方法是错误的。

对于列表中的任何或所有元素,“超过”是指 <-1000(例如在给定期间超过信用额度)。

标签: scala

解决方案


i.collect{case x if x < 0 => Math.abs(x) + total}

在上面的代码片段中,没有分配回 total,也许你需要:

val total = i.filter(_ < 0).map(Math.abs).sum

推荐阅读