最近,我开始学习Scala的学校项目。赋值说我们必须删除未排序数组的元素,而不必留下" hole"在数组中。我已经制作了以下代码:
private var _list = new Array[NAW](20)
private var _highestIndex = 0;
def removeAllbyName(name : String): Unit = {
for(i <- 0 until _highestIndex){
if(_list(i).name == name)
deleteByIndex(i)
}
}
def deleteByIndex(i : Int) : Unit = {
if(i != -1){
for(x <- i until _highestIndex){
_list(x) = _list(x + 1)
}
_highestIndex -= 1
}
}
我在数组中填充了10个实例,maximumIndex将是10并且在第一次删除之后9.但是for循环仍然计数到9,这导致空指针异常,即使我们使用&#34 ;直到&#34 ;.调试器确实认识到_highestIndex是9.有人可以解释为什么会发生这种情况吗?
提前致谢!
答案 0 :(得分:0)
0 until _highestIndex
只会被评估一次。
for (i <- 0 until _highestIndex) {
if (_list(i).name == name)
deleteByIndex(i)
}
相当于:
val range = 0 until _highestIndex
for (i <- range) {
if (_list(i).name == name)
deleteByIndex(i)
}
您可以看到范围仅确定一次。
您可以尝试使用while循环,或在if语句中使用guard。
答案 1 :(得分:0)
更改for-loop
内的deleteByIndex
,以避免exception
for(
x <- i until highestIndex
if (x + 1) < highestIndex
)
list(x) = list(x + 1)