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

将数组中的每个元素向下移动一个(Java),java,arrays,sorting,for-loop,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--) {

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

//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);
以上内容应满足您的要求

然而,我认为这不是正确的方式

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

维护一个开始索引。开始于

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);

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

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

for(inti=0;i根据我对代码的理解。您应该使用以下循环,似乎不需要临时变量

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

for(int i=0;i首先通过将所有元素下移一行来释放最后一个元素

样本:

String[] sarr=new String[10];
for(int i=0;i<sarr.length;i++){
   sarr[i]=sarr[i+1];
}
这种方法更简单,可读性更强

编辑:是的,Bohemian是对的,它抛出了ArrayIndexOutOfBounds异常。原因是
i+1
将在上一次迭代中尝试引用数组范围之外的索引

解决方案是将最后一个元素设置为null或在它是最后一个元素时中断

我将继续将最后一个元素设置为null

int nextElementIndex = i + 1;
sarr[i] = nextElementIndex < sarr.length ? sarr[nextElementIndex] : null;
int-nextElementIndex=i+1;
sarr[i]=nextElementIndex
首先将所有元素向下移动一行,释放最后一个元素

样本:

String[] sarr=new String[10];
for(int i=0;i<sarr.length;i++){
   sarr[i]=sarr[i+1];
}
这种方法更简单,可读性更强

编辑:是的,Bohemian是对的,它抛出了ArrayIndexOutOfBounds异常。原因是
i+1
将在上一次迭代中尝试引用数组范围之外的索引

解决方案是将最后一个元素设置为null或在它是最后一个元素时中断

我将继续将最后一个元素设置为null

int nextElementIndex = i + 1;
sarr[i] = nextElementIndex < sarr.length ? sarr[nextElementIndex] : null;
int-nextElementIndex=i+1;
sarr[i]=nextElementIndex
首先,您不需要使用临时变量:

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]);
int[]moveArray={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
int=21;
for(int i=0;i对于(int i=0;i首先,不需要使用临时变量:

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]);
int[]moveArray={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
int=21;
for(int i=0;i对于(int i=0;i您的问题不清楚。如果您有一个包含20个元素的数组,您希望将第20个元素存储在第19个元素中,并在替换之前存储第19个元素中包含的值。您计划对存储的值执行什么操作?是否将其移动到18个?计算玩家最后20次移动-听起来像您需要一个数据块(FIFO)大小为20。你的问题不清楚。如果你有一个包含20个元素的数组,你想在第19个元素中存储第20个元素,并在替换之前存储第19个元素中包含的值。你打算对存储的值做什么?你想将其移动到18吗?数一数玩家最后20次移动-听起来像是溜溜球你需要一个大小为20的数据块(FIFO)。此代码将抛出一个超出范围的索引,异常为pn。请尝试
i
。它也是int[]而不是String[].否则就好了answer@Bohemian
i
不是问题所在。但你是对的,有一个错误。我更正了它。而且我只是想给OP看一个简单的示例,而不是更改他的代码,我认为这太复杂了。将其更改为任何类型都很容易。是的,我知道我在编辑中更正了它。我只是告诉您这不是因为循环条件:)显然您不知道,因为现在您发布的用于向下移动元素的代码将爆炸!我将为您解释清楚:在上一次迭代中,
i
将是
sarr.length-1
,这是最后一个元素的索引,但您的代码引用了
sarr[i+1]
…砰!此代码将抛出一个超出边界的索引ExceptPN。请尝试
i
。它也是int[]而不是String[].否则就好了answer@Bohemian
i
不是问题所在。但你是对的,有一个错误。我更正了它。而且我只是想给OP看一个简单的示例,而不是更改他的代码,我认为这太复杂了。将其更改为任何类型都很容易。是的,我知道我在编辑中更正了它。我只是告诉您这不是因为循环条件:)显然您不知道,因为现在您发布的用于向下移动元素的代码将爆炸!我将为您解释清楚:在上一次迭代中,
i