我目前正在进行一个项目,旨在提高我对Java的理解。我的项目的一部分是使用数组,并能够将位置向下移动1以便在特定位置插入另一个元素。例如,按字母顺序排列的名称...如果我想将元素放置在数组的中间,则应将位置移动-1。

我一直在环顾四周,实际上发现我认为可能是StackOverflow的解决方案。尽管海报实际上并未提供正在发生的事情的完整细节。我希望有人可以向我解释。因为我不想使用我还没有完全理解的东西。

这是一个问题:

我进行了不错的搜索,无法找到向下移动数组的工作代码。我希望做的是将值存储在数组的最后一个位置,替换最后一个位置,然后将array [20]移到array [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;


任何建议或解决方案都将真正帮助您,谢谢

这是解决方案:

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


如果有人可以为我解释解决方案,请逐步进行,我将非常感激

最佳答案

假设您有以下字符串数组(我正在使用字符串
因为我认为它们会更容易遵循,但原理相同
适用):

String[] moveArray = new String[] {"A", "B", "C", "D", "E"};


假设您要删除"A"并将剩余的字符串向左移动
乘以1,这样您就可以在末尾添加“ F”。

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


这将导致moveArray包含{"B", "C", "D", "E", "F"}

现在让我们检查循环的设置:for (int i = 0; i < moveArray.length - 1; i++)


i(开头)处启动索引变量0
i < moveArray.length - 1时继续进行迭代。这意味着迭代
"A"(索引0)到"D"(索引3,因为moveArray.length - 1
5 - 1,即4)。
每次迭代后,将i增加1


每次迭代:moveArray[i] = moveArray[i + 1];


迭代i == 0


moveArray{"A", "B", "C", "D", "E"}
moveArray[0]设置为moveArray[1]
现在moveArray{"B", "B", "C", "D", "E"}
i0递增到1
i == 1小于4

迭代i == 1


moveArray{"B", "B", "C", "D", "E"}
moveArray[1]设置为moveArray[2]
现在moveArray{"B", "C", "C", "D", "E"}
i1递增到2
i == 2仍然小于4

迭代i == 2


moveArray{"B", "C", "C", "D", "E"}
moveArray[2]设置为moveArray[3]
现在moveArray{"B", "C", "D", "D", "E"}
i2递增到3
i == 3仍然小于4

迭代i == 3


moveArray{"B", "C", "D", "D", "E"}
moveArray[3]设置为moveArray[4]
现在moveArray{"B", "C", "D", "E", "E"}
i3递增到4
i == 4现在是4,请停止循环。



循环后的赋值:moveArray[moveArray.length - 1] = intoWalk;


将最后一个索引4设置为intoWalk,即"F"
现在moveArray{"B", "C", "D", "E", "F"}


这就是解决方案所描述的。

09-30 15:00