将每个元素向下移动一个数组(Java)

时间:2013-05-22 05:17:33

标签: java arrays sorting for-loop

我有一个不错的搜索,无法找到向下移动阵列的工作代码。我希望做的是将值存储在数组的最后位置,替换最后一个位置,然后将数组[20]移动到数组[19]。这是为了计算玩家所做的最后20次动作,但实际存储时遇到了麻烦。这就是我试图做的事情

//an int moveArray[20] previously stated and instantiated
int temp1, temp2;

for (int i = moveArray.length - 1; i > 0; i--) 
{
     temp1 = moveArray[i - 1];
     temp2 = moveArray[i - 2];
     moveArray[i - 1] = moveArray[i];
     temp1 = temp2;
}
moveArray[moveArray.length - 1] = intoWalk;

任何建议或解决方案都会有所帮助,谢谢

4 个答案:

答案 0 :(得分:4)

据我所知,你的代码。您应该使用以下循环,似乎不需要临时变量。

for(int i=0;i<moveArray.length-1;i++){ 
     moveArray[i] = moveArray[i+1];
}
moveArray[moveArray.length - 1] = intoWalk;

答案 1 :(得分:3)

首先,您不需要使用临时变量:

int [] moveArray = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
int intoWalk = 21;

for (int i = 0; i < moveArray.length-1; i++) {
    moveArray[i] = moveArray[i+1];
}
moveArray[moveArray.length - 1] = intoWalk;

for (int i=0; i<moveArray.length; i++)
    System.out.println(moveArray[i]);

但有一种更好的方法:使用链表来模拟FIFO:

LinkedList<Integer> fifo = new LinkedList<Integer>();
int intoWalk = 21;

for (int i=1; i<=20; i++)
    fifo.add(i);

fifo.removeFirst();
fifo.add(intoWalk);

for (Integer fifoItem : fifo)
    System.out.println(fifoItem);

通过这样做,您不必在每次要添加数字时修改数组中的每个元素,只需在链接列表中添加和删除项目。

答案 2 :(得分:0)

//an int moveArray[20] previously stated and instantiated
int temp1, temp2;
temp1 = moveArray[moveArray.length - 1];
for (int i = moveArray.length - 2; i >= 0; i--) 
{
    temp2 = moveArray[i];
    moveArray[i] = temp1;
    temp1 = temp2;
}

moveArray[moveArray.length - 1] = intoWalk;

以上应该做你想要的。

但是,我不认为这是正确的方法。

我会使用相同的数组作为圆形数组 - 这样 - 您不需要每次都向下移动。

维护起始索引。它始于

start = 0;

它保持在0,直到所有20个元素都被填满为止。 当下一个元素进来时,

moveArray[start] = intoWalk;
++start;

如果您想随时迭代数组,请从start开始,而不是从0开始。

int i = start;
do
{
    // do what you want

    i = (i + 1)%20; 

} while (i != start);

答案 3 :(得分:0)

首先通过向下移动所有元素来使最后一个元素自由。

示例:

String[] sarr=new String[10];
for(int i=0;i<sarr.length;i++){
   sarr[i]=sarr[i+1];
}

然后将新变量分配到最后。

sarr[sarr.length-1]="new value";

这种方法更简单,更易读。

编辑:是的波西米亚人是对的,它抛出了一个ArrayIndexOutOfBounds异常。原因是i+1将尝试在最后一次迭代中引用数组范围之外的索引。

解决方案是将最后一个元素设置为null,或者当它是最后一个元素时将其中断。

我将把最后一个元素设置为null。更改的代码如下。

int nextElementIndex = i + 1;
sarr[i] = nextElementIndex < sarr.length ? sarr[nextElementIndex] : null;