gpt4 book ai didi

Scala 类型错误

转载 作者:行者123 更新时间:2023-12-01 23:29:18 25 4
gpt4 key购买 nike

我正在研究一个黑客排名问题 ( https://www.hackerrank.com/challenges/eval-ex ),但我有点卡住了。

我有一个不断出现的异常:

Solution.scala:12: error: type mismatch;
found : (Double, Double) => Double
required: (AnyVal, AnyVal) => AnyVal
(1 to 9).reduce((total: Double, current: Double) => Math.pow(exp,current)/factNonRecursive(current))

我在这段 Scala 代码中做错了什么?

完整代码:

object Solution {
def factNonRecursive(num: Double): Double = {
(1 to (num.toInt)).foldLeft(1) ((a,b) => (a * b)) toDouble
}
def main(args: Array[String]) {
val sc = new java.util.Scanner (System.in);
var n = sc.nextInt();
var a0 = 1;
while(a0 < n){
var x = sc.nextDouble();
def e(exp: Double) = {
(1 to 9).reduce((total: Double, current: Double) => Math.pow(exp,current)/factNonRecursive(current))
}
println(e(x))
a0+=1;
}
}
}

最佳答案

发生这种情况是因为您有一个 Range[Int],稍后您对其调用 reduce 并且它需要一个 Int,而不是 Double,因此编译器推断两者的共同祖先类型是 AnyVal。您首先需要将整数映射为 double 值:

(1 to 9)
.map(_.toDouble)
.reduce((_, current) => Math.pow(exp, current) / factNonRecursive(current))

替代 Range 的另一种方法是使用 List.range(1.0, 9.0) 并避免额外的 map:

List.range(1.0, 9.0)
.reduce((_, current) => Math.pow(exp, current) / factNonRecursive(current))

此外,factNonRecursive 可以替换为 product:

(1 to num.toInt).product.toDouble

关于Scala 类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42049737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com