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

Scala中计算并比较Map两行数据最大平均值的问题排查

问题分析

错误信息翻译:未指定值参数:g: String => (String, Int)

核心问题是函数签名不匹配+调用参数错误:

  • averageStockLevel1的签名是(String, String) => (String, Int),但menuShowDoubleDataStock要求传入两个(String) => (String, Int)类型的单参数函数
  • handleFour调用menuShowDoubleDataStock时只传了一个参数,既缺少第二个参数g,同时传入的averageStockLevel1类型也不匹配
解决方案

调整函数设计,让逻辑更清晰且匹配调用需求:

1. 拆分单股票平均值计算函数

先实现一个仅计算单支股票平均值的函数,适配菜单输入的单参数需求:

// 计算单支股票的平均值,返回(股票代码, 平均值)
def getStockAverage(stockCode: String): (String, Int) = {
  val avg = mapdata.get(stockCode)
    .map(list => average(list).toInt)
    .getOrElse(0)
  (stockCode, avg)
}

2. 实现两支股票平均值比较函数

基于单股票计算函数,完成比较逻辑:

// 比较两支股票,返回平均值更大的那支
def compareStockAverages(stock1: String, stock2: String): (String, Int) = {
  val (code1, avg1) = getStockAverage(stock1)
  val (code2, avg2) = getStockAverage(stock2)
  if (avg1 > avg2) (code1, avg1) else (code2, avg2)
}

3. 调整菜单调用逻辑

修改菜单函数,直接整合输入、计算、比较的完整流程:

// 读取两支股票输入,显示各自平均值并输出较大的那支
def menuShowDoubleDataStock(): Unit = {
  print("请输入第一支股票代码 > ")
  val stock1 = readLine().trim
  val data1 = getStockAverage(stock1)
  println(s"${data1._1}: ${data1._2}")

  print("请输入第二支股票代码 > ")
  val stock2 = readLine().trim
  val data2 = getStockAverage(stock2)
  println(s"${data2._1}: ${data2._2}")

  val result = compareStockAverages(stock1, stock2)
  println(s"平均值更高的股票:${result._1},平均值:${result._2}")
}

def handleFour(): Boolean = {
  menuShowDoubleDataStock()
  true
}

4. 保留原平均值计算函数

原列表平均值计算函数可继续使用:

// 计算列表平均值
def average(list: List[Int]): Double = list.sum.toDouble / list.size
关键说明
  • 拆分单股票计算函数,让函数职责更单一,同时适配了菜单输入的单参数逻辑
  • 调整后的菜单函数不再依赖外部传入的函数参数,彻底避免类型不匹配问题
  • 完整覆盖需求:读取两支股票→计算各自平均值→比较并输出结果

内容的提问来源于stack exchange,提问作者Dramane Kone

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 14:55:20