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

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且有硬币可用时,分为两种情况计算总和:
    1. 使用当前硬币面额:递归计算money - coins.head金额的找零方式(保留当前硬币,允许重复使用)
    2. 不使用当前硬币面额:递归计算原金额的找零方式(移除当前硬币,只使用剩余面额)
  • 边界情况2:当金额为负或无硬币可用时,返回0(无有效找零方式)

内容的提问来源于stack exchange,提问作者Акерке Орынбасарова

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 10:45:19