我有一个不错的搜索,无法找到向下移动阵列的工作代码。我希望做的是将值存储在数组的最后位置,替换最后一个位置,然后将数组[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;
任何建议或解决方案都会有所帮助,谢谢
答案 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;