2016-12-26 54 views
1

我已经习惯了Scala中的各种数据结构,并且我注意到这个函数(人为的例子),它应该将可变数组中的每个字符移动到右边之一,具有在阵列上没有影响:Scala:在数组中移位元素

def shiftRight(str: String): Array[Char] = { 
    val chars = str.toCharArray 
    for(i <- chars.length - 1 until 0) chars(i) = chars(i - 1) 
    chars 
    } 
    println(shiftRight("ABCD").mkString) 

其产生的结果

ABCD 

不是预期的

AABC 
+0

'直到0通过-1' –

+0

甚至更​​好用更明确的'I' - 范围(启动= chars.length - 1,结束= 0,step = -1)' –

回答

4

范围的默认步长为1。见类Rangehere隐含,让你到它here
而不是

for(i <- chars.length - 1 until 0)... 

你需要:

for(i <- chars.length - 1 until 0 by -1)...