class x(x:int){val y=x}
class z {
val grid= Array.ofDim(8,8)
}
该对象是否已初始化? 当我尝试在循环中初始化
for(i<-0 until 8;j<-0 until 8) grid(i)(j)=new x(someValue)
我收到错误:空指针异常
答案 0 :(得分:2)
像val grid = Array.fill(8, 8) { new X(1) }
答案 1 :(得分:1)
您可以使用Array.fill
:
Array.fill(8, 8)(myValue)
或者您可以将toArray
与嵌套for
理解结合使用:
{
for {
i <- 0 until 8
} yield { for {
j <- 0 until 8
} yield myValue
}.toArray }.toArray
同样,您可以将toArray
与map
:
(0 until 8).map { _ => (0 until 8).map { _ => myValue }.toArray }.toArray
您也可以使用这些方法的某些组合:
Array.fill(8){ { for(_ <- (0 until 8)) yield myValue }.toArray }
答案 2 :(得分:0)
根据定义,数组在Scala中是可变的。它们本质上是Java阵列,增强了很多Scala的酷收集API。
您遇到的主要问题是Array缺少类型参数化。通过指定Array类型为[X]
,以下代码对我来说非常有用:
class X(x:Int){val y=x}
class Z {
val grid= Array.ofDim[X](8,8)
for(i<-0 until 8;j<-0 until 8) grid(i)(j)=new X(2)
}