You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 02:35:49