gpt4 book ai didi

arrays - Scala BigInt 数组

转载 作者:行者123 更新时间:2023-12-01 15:03:37 27 4
gpt4 key购买 nike

我正在尝试解决这个问题 http://projecteuler.net/problem=62我被这个错误挂断了:

euler.scala:10: error: type mismatch;
found : Array[Any]
required: Array[Int]
Note: Any >: Int, but class Array is invariant in type T.
You may wish to investigate a wildcard type such as `_ >: Int`. (SLS 3.2.10)
master(perm) = if (master.contains(perm)) master(perm) :+ cube else Array(cube)
^
one error found

问题可能是因为 BigInt 试图存储在数组中,但显然不存在 Array[BigInt] 数组这样的东西

下面是我的代码:

import scala.util.control.Breaks._

var m = new scala.collection.mutable.LinkedHashMap[String,Array[Int]]
var master = m.withDefaultValue(Array.empty[Int])
val range = 345 to 9999

range.foreach { n =>
val cube = BigInt(n) * n * n
val perm = cube.toString.map(_.asDigit).mkString("")
master(perm) = if (master.contains(perm)) master(perm) :+ cube else Array(cube)
}

master.values.foreach { value =>
if (value.length >= 5) {
println (Math.cbrt(value(0)))
break
}
}

最佳答案

立方体是 BigInt 类型。所以 Array(cube) 的类型是 Array[BigInt]

master(perm)的类型是Array[Int],而你正在尝试做

Array[Int] :+ BigInt => Array[Int], which does not work.

建议:将所有数组设为 BigInt 类型。

所以:

var m = new scala.collection.mutable.LinkedHashMap[String,Array[BigInt]]
var master = m.withDefaultValue(Array.empty[BigInt])

还可以考虑使用列表而不是数组。那个 :+ 运算符每次都会分配一个新数组。如果您使用列表,它们会更智能,会更有效地执行这些不可变操作。

关于arrays - Scala BigInt 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19437297/

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