java数组行中数字的移动
当我有一行数字[1,2,3,4,5]时,我很难想象会发生什么,我要么想把这些数字移到行的前面,要么移到行的后面
基本上,在这里,我将通过我的行,从后到前,并添加每个数字。但与此同时,将索引向右移动一行
代码片段:
void addCoordinateRowFront(CoordinateRow rowOfCoordinates) {
for(int j = rowOfCoordinates.numberOfElements; j > 0; j--) {
for(int i = numberOfElements; i > 0; i--) {
newCoordinateArray[i] = newCoordinateArray[i-1];
}
newCoordinateArray[0] = rowOfCoordinates.newCoordinateArray[j-1];
numberOfElements++;
}
}
}
但我仍然没有真正理解正在发生的事情
例如,如果我有一行[1,2,3,4,5],如果我把这些数字加在这行的前面或后面,结果会怎样
# 1 楼答案
newCoordinateArray[i] = newCoordinateArray[i-1];
基本上是将元素向后移动,即索引2处的元素将从索引1获取值,然后索引1将从索引0获取值。最后,索引0将获得新值内循环
这意味着,如果正确,内部循环将
[1,2,3,4,5]
变成[1,1,2,3,4]
:[1,2,3,4,4]
[1,2,3,3,4]
[1,2,2,3,4]
[1,1,2,3,4]
如果你看这个例子,你应该能够在你的内部循环中发现错误:
int i = numberOfElements
表示i = 5
,如果numberOfElements
实际上表示rowOfCoordinates.numberOfElements
(在本例中为5)。但是,a[5] = ...
将导致ArrayOutOfBoundsException
,因为5元素数组中的最高索引是4外环
外部循环从最后一个元素(
a[0] = a[j-1]
)开始移动到索引0中。这意味着,在第一次运行内部循环之后,您有[1,1,2,3,4]
,现在a[0] = a[4]
将导致[4,1,2,3,4]
现在让我们看看外循环的其他迭代:
j = 4
->;内部循环结果:[4,4,1,2,3]
,a[0] = a[3]
结果为[2,4,1,2,3]
(在a[3]
处的值为2)j = 3
->;内部循环结果:[2,2,4,1,2]
,a[0] = a[2]
结果为[4,2,4,1,2]
(在a[2]
处的值为4)j = 2
->;内部循环结果:[4,4,2,4,1]
,a[0] = a[1]
结果为[4,4,2,4,1]
(在a[1]
处的值为4)j = 1
->;内部循环结果:[4,4,4,2,4]
,a[0] = a[0]
不会改变任何内容,因此最终结果将是[4,4,4,2,4]
如何在适当的位置移动
如果要在不创建阵列副本的情况下移动阵列中的元素,即就地移动,可以执行以下操作:
这意味着:
将第一个图元移动到其新位置,以替换另一个图元。所以你要追踪被替换的元素,以及它的索引。循环现在移动替换的元素,替换下一次迭代处理的另一个元素
因此,将[A,B,C,D,E]移动2意味着:
模运算符也可用于允许更大的移位,基本上会被带回到范围内,即将一个4元素数组移位13与将其移位1相同(13%4=1)
通过增加长度将移位带入正范围,可以支持负移位,即给定一个5元素数组,-1移位(左1移位)与4移位(右4移位)相同
所以你可以一开始就这么做: