Scala获取用户输入到列表及countChange函数类型不匹配问题排查
找零计数问题(Counting Change)解决及输入处理指南
一、类型不匹配错误原因
你代码中main函数里的coins变量被错误地用readInt()读取为单个整数,而countChange函数要求的参数类型是List[Int],这直接导致了类型不匹配报错。
二、Scala中获取列表形式的用户输入
要获取空格分隔的硬币面额列表,可按以下步骤处理:
- 读取整行输入
- 按空格分割字符串
- 将每个分割后的字符串转换为整数
- 转换为
List[Int]
对应代码:
val coins = scala.io.StdIn.readLine().split(" ").map(_.toInt).toList
如果需要处理无效输入(比如用户输入非数字),可以添加异常捕获忽略无效值:
val coins = scala.io.StdIn.readLine() .split(" ") .flatMap(s => try Some(s.toInt) catch { case _: NumberFormatException => None }) .toList
三、修正后的完整代码
object Main { def countChange(money: Int, coins: List[Int]): Int = { if (money == 0) 1 else if (money > 0 && !coins.isEmpty) countChange(money - coins.head, coins) + countChange(money, coins.tail) else 0 } def main(args: Array[String]): Unit = { println("输入待找零金额:") val money = scala.io.StdIn.readInt() println("输入硬币面额(空格分隔):") val coins = scala.io.StdIn.readLine().split(" ").map(_.toInt).toList println(s"不同找零方式数量:${countChange(money, coins)}") } }
四、递归逻辑说明
你的countChange递归逻辑符合问题要求:
- 边界情况1:当
money == 0时,返回1(表示找到一种有效找零方式:不使用任何硬币) - 递归分支:当金额大于0且有硬币可用时,分为两种情况计算总和:
- 使用当前硬币面额:递归计算
money - coins.head金额的找零方式(保留当前硬币,允许重复使用) - 不使用当前硬币面额:递归计算原金额的找零方式(移除当前硬币,只使用剩余面额)
- 使用当前硬币面额:递归计算
- 边界情况2:当金额为负或无硬币可用时,返回0(无有效找零方式)
内容的提问来源于stack exchange,提问作者Акерке Орынбасарова
相关产品推荐
相关产品推荐

