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

运行Scala代码时得到返回值()?附代码求问题排查与修正指导

为什么返回()

你运行代码得到()的核心原因是:()是Scala中Unit类型的唯一实例,对应其他语言里的"无返回值"语义。你的check2方法调用了Array.foreach,这个方法的设计目的是遍历集合执行副作用操作,返回值固定为Unit,自然不会返回你在分支里写的计算值或提示字符串,最终打印出来就是()。

代码存在的其他问题
  • 类型判断逻辑完全偏离预期:你在foreach里逐元素匹配类型,本质是挨个判断数组里的每个元素是什么类型,根本不是判断整个输入数组的类型,和你要返回"这是Double/ Float数组"的需求完全不符。
  • 模式匹配分支语法错误:case _:Int => multBylarge(_)中的下划线不会绑定当前匹配到的元素,既没有给multBylarge传入正确的数组参数,也不会实际执行乘积计算逻辑。
  • multBylarge边界判断失效:当输入数组长度小于2(空数组、单元素数组)时,代码访问排序后列表的第0、1位会直接抛出索引越界异常;你写的空数组分支仅给result加1,没有中断后续逻辑,依然会触发报错。
  • 冗余逻辑过多:不需要手动循环把数组元素逐个追加成List,Scala原生集合提供了直接排序、转换、取元素的API,手动循环追加元素性能差还容易引入bug。
修正后可运行代码
object test {
  // 计算整数数组最大两个数的乘积,补全边界校验
  def multByLarge(input: Array[Int]): Int = {
    if (input.length < 2) throw new IllegalArgumentException("数组长度至少为2才能计算最大两数乘积")
    // 直接对数组降序排序,取前2个元素相乘
    input.sorted(Ordering[Int].reverse).take(2).product
  }

  def check2(input: Array[_]): Any = {
    // 直接匹配数组整体类型,不需要逐元素遍历
    input match {
      case _: Array[Int] => multByLarge(input.asInstanceOf[Array[Int]])
      case _: Array[Double] => "this is a double array"
      case _: Array[Float] => "this is a float array"
      case _ => "this is not a supported array type"
    }
  }

  def main(args: Array[String]): Unit = {
    println(check2(Array(1,3,5,1,3,4))) // 输出结果为20,即最大两个数5*4的乘积
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 12:15:27