将数组中的每个元素向下移动一个(Java)
我已经进行了一次像样的搜索,无法找到向下移动数组的工作代码。我希望做的是将值存储在数组的最后一个位置,替换最后一个位置,然后将数组[20]移动到数组[19]。这是为了计算玩家最后20个动作,但我在实际存储时遇到了问题。这就是我试图做的将数组中的每个元素向下移动一个(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--) {
//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@Bohemiani
不是问题所在。但你是对的,有一个错误。我更正了它。而且我只是想给OP看一个简单的示例,而不是更改他的代码,我认为这太复杂了。将其更改为任何类型都很容易。是的,我知道我在编辑中更正了它。我只是告诉您这不是因为循环条件:)显然您不知道,因为现在您发布的用于向下移动元素的代码将爆炸!我将为您解释清楚:在上一次迭代中,i
将是sarr.length-1
,这是最后一个元素的索引,但您的代码引用了sarr[i+1]
…砰!此代码将抛出一个超出边界的索引ExceptPN。请尝试i
。它也是int[]而不是String[].否则就好了answer@Bohemiani
不是问题所在。但你是对的,有一个错误。我更正了它。而且我只是想给OP看一个简单的示例,而不是更改他的代码,我认为这太复杂了。将其更改为任何类型都很容易。是的,我知道我在编辑中更正了它。我只是告诉您这不是因为循环条件:)显然您不知道,因为现在您发布的用于向下移动元素的代码将爆炸!我将为您解释清楚:在上一次迭代中,i