Scala递归+模式匹配实现序列中Tiger数量统计问题
解决Scala递归+模式匹配统计Tiger数量的问题
你的代码目前存在两个核心问题:
- 缺少递归终止条件(空序列的处理逻辑)
- 仅打印匹配到的Tiger实例,未对计数进行累加和返回
以下是修正后的实现,完全基于模式匹配和递归逻辑:
sealed trait Animal case class Hippo(name: String, age: Int) extends Animal case class Tiger(name: String, age: Int) extends Animal def amountOfTigers(animals: Seq[Animal]): Int = animals match { // 空序列:递归终止,返回0 case Nil => 0 // 匹配到Tiger头部:计数+1,递归处理剩余序列 case _: Tiger +: tail => 1 + amountOfTigers(tail) // 非Tiger头部:计数不变,递归处理剩余序列 case _ +: tail => amountOfTigers(tail) } val data = Seq[Animal]( Hippo("Mino", 4), Tiger("Justin", 1), Tiger("Jason", 20), Tiger("Sloop", 10) ) // 调用测试,输出结果为3 println(amountOfTigers(data))
关键说明:
- 用
Nil匹配空序列作为递归终止条件,避免无限递归导致栈溢出 - 直接通过
_: Tiger模式匹配判断头部是否为Tiger,比isInstanceOf更贴合Scala的模式匹配设计,也更安全 - 递归调用时通过
1 + ...或直接传递的方式累加计数,最终返回统计总和
内容的提问来源于stack exchange,提问作者Jest Inestesa
相关产品推荐
相关产品推荐

