2016-06-20 159 views
2

我需要添加到阵列中两个字符串设定在ArrayBuffer值,省略第一次出现:通过指数斯卡拉

val strings = ArrayBuffer[String]() 

    strings(1) = "abc1" 
    strings(2) = "abc2" 

但是我却越来越

Exception in thread "main" java.lang.IndexOutOfBoundsException: 1 

如何解决这一问题?

+0

的可能的复制[初始化Scala中的数据结构](http://stackoverflow.com/questions/37919895/initialize-data-structure-in-scala) –

+0

这是或多或少相同的问题[你以前的问题](http://stackoverflow.com/questions/37919895/initialize-data-structure-in-scala)。首先需要在“ArrayBuffer”中添加元素,然后才能修改特定索引处的元素。 – Jesper

+0

但是我不能用'+ ='添加元素,因为我需要用索引来设置它们 – ps0604

回答

2

ArrayBuffer是空的,所以你不能在索引i元素设置为新String - 指数i是不是一个有效的索引,如果ArrayBuffer是空的。首先要确保的元素在ArrayBuffer存在,加入他们:

val strings = ArrayBuffer[String]() 

strings += "abc1" 
strings += "abc2" 

现在ArrayBuffer有两个要素,如果你愿意,你可以对其进行修改。请注意,编号从0开始,而不是在1

strings(0) = "something else" 
strings(1) = "hello world" 

如果你想预填的ArrayBuffer比如,你可以使用fill,我向您展示在我回答你刚才的问题。

// Fill with 10 empty strings (creates 10 elements in the ArrayBuffer) 
val strings = ArrayBuffer.fill(10) { "" } 

// Now you can set them (valid indices are 0...9) 
strings(0) = "abc1" 
strings(1) = "abc2" 

或者,使用Map代替ArrayBuffer,在地图的键数和值都是字符串。

import scala.collection.mutable.Map 

val strings: Map[Int, String] = Map() 

strings(1) = "abc1" 
strings(2) = "abc2" 
+0

没有办法按索引设置事件? – ps0604

+0

@ ps0604你是什么意思?如果使用'ArrayBuffer',那么在修改它之前,指定索引处的元素必须存在。另请参阅我的替代解决方案与“地图”。 – Jesper