2016-11-03 139 views
0

當我創建了一個Scala數組並添加了一個元素,但數組長度仍然爲0,並且我無法獲得添加的元素,儘管我可以在構造函數中看到它。可以Scala數組添加新元素

scala> val arr = Array[String]() 
arr: Array[String] = Array() 

scala> arr:+"adf" 
res9: Array[String] = Array(adf) 

scala> println(arr(0)) 
java.lang.ArrayIndexOutOfBoundsException: 0 
    ... 33 elided 
+0

你正在創建一個新的數組用':+'存儲在'res9'在你的榜樣,因爲你沒有把它分配到其他地方。您可以在該數組中找到新元素。原始數組沒有以任何方式改變。 – alextsc

回答

1

您聲明瞭0大小的數組。它不能有任何元素。你的數組的大小爲0. Array[String]()是一個數組構造器語法。

:+使用給定元素創建一個新數組,因此即使在執行:+操作之後,舊數組也是空的。

您必須使用ofDim函數聲明特定大小的數組,然後纔可以使用arr(index) = value語法將元素放入內部。

聲明的數組大小一旦不像列表一樣動態增加。嘗試附加值會創建新的數組實例。

或者您可以在創建過程中使用Array("apple", "ball")語法來初始化數組。

val size = 1 
val arr = Array.ofDim[String](size) 
arr(0) = "apple" 

斯卡拉REPL

scala> val size = 1 
size: Int = 1 

scala> val arr = Array.ofDim[String](size) 
arr: Array[String] = Array(null) 

scala> arr(0) = "apple" 

scala> arr(0) 
res12: String = apple 
+0

@tkachuko數組大小不會動態增加 – pamu

+1

@tkachuko試圖追加會創建新的數組實例,並且數組是可變的 – pamu