2017-02-05 8 views
3

私はHacker Rank問題(https://www.hackerrank.com/challenges/eval-ex)に取り組んでいますが、ちょっとしたことがあります。スカラー型エラー

私が来る続け例外いる:私はこのScalaのコードで何が問題を

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)) 

をやっていますか?

全コード:あなたは、後で上reduceを呼び出し、それがIntを期待Range[Int]、ないDoubleを持っているので、

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; 
     } 
    } 
} 

答えて

4

これは、したがって、コンパイラは両方のための共通の祖先のタイプを推測され、発生しましたAnyValです。あなたが最初のダブルスにmapの整数をする必要があります:

(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 
+1

あなたは最高です。 – noname

関連する問題