2015-07-10 45 views
0
class x(x:int){val y=x} 

    class z { 
     val grid= Array.ofDim(8,8) 
    } 

該對象是否已經初始化? 當我嘗試在環路初始化像scala:初始化不可變對象數組

for(i<-0 until 8;j<-0 until 8) grid(i)(j)=new x(someValue) 

我得到錯誤:空指針異常

+0

順便說一句,'類Foo(X:智力){VAL Y = X}'和'類Foo(VAL Y:詮釋)'基本上是相同的 –

回答

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 

同樣,你可以使用toArraymap

(0 until 8).map { _ => (0 until 8).map { _ => myValue }.toArray }.toArray 

您還可以使用這些方法的組合:

Array.fill(8){ { for(_ <- (0 until 8)) yield myValue }.toArray } 
0

陣列被定義可變Scala中。它們基本上是用很多Scala的Cool Collection API增強的Java數組。

您所擁有的主要問題是數組缺失的類型參數化。通過指定的數組是[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) 
} 
+0

我指定的類型參數,仍然是相同的問題, 我有一個數組的初始部分數組,其餘部分與其他值。 使用var時它正在工作,但我不想使用var – xrs

+0

您可以添加您擁有的確切代碼或更接近於您如何填充數組的東西? Var或Val在這個設置中應該沒有太大的區別。 – marios

+0

我有一個2d的對象數組。我必須首先通過隨機化初始化數組的某些部分,然後根據那些較早初始化的部分來初始化其餘部分。 (i <-0至8){ – xrs