java - 将数组向右移动一个插槽
问题描述
这可能已经得到回答,但我已经寻找了一段时间,这就是所有解决方案所说的。如果已经回答,请将我重定向到正确的线程。
这个概念很简单。我需要将数组的每个元素向右移动一个位置。这必须通过用户提供的索引来完成。这是应该发生的事情:
预期输出
{0, 1, 2, 3} --> add(4 (element), 1 (location)) --> {0, 4, 1, 2, 3}
但是,在测试我的代码时,我得到了这样的结果:
实际结果
{0, 1, 2, 3} --> add(4, 1) --> {0, 4, 1, 1, 1}
这是我的代码:
private void shiftRight(int index)
{
assert !isFull();
for(int i = index; i < elements.length - 1; i++)
{
elements[i + 1] = elements[i];
}
}
我觉得我非常接近解决这个问题。就像我不认为有什么大问题,但我似乎找不到它。
解决方案
当你要将元素向右移动时,你不能从左到右遍历数组,因为你会覆盖下一个数组点的值。我还注意到您写了“i < elements.length - 1”。您可能不应该添加 -1,否则您将跳过数组中的最后一个值(除非您愿意)。
首先,如果您使用原始类型,请确保您的数组有足够的空间(您还需要 1 个空间)。因此,您需要创建第二个数组。
例子:
int[] array = new int[prevValue+1];
现在您必须将值向右移动,以防止覆盖我们从右侧开始向左移动的下一个值(取决于您使用的是相同的数组还是不同的数组)。
for (int i = array.length-1; i >= startPos; i--) {
elements[i+1] = array[i];
}
然后在您预留的额外位置上,您可以设置一个新值:
elements[startPos]=value;
最后但并非最不重要的一点是,您必须填充以前的元素(如果您使用相同的数组,您可以忽略它)。
for (int i = 0; i < startPos; i++) {
elements[i] = array[i];
}
推荐阅读
- javascript - 在 VSCode 中的 JavaScript 中预览 SVG
- powershell - CMD/PowerShell - 将文件另存为 XML
- c++ - 不打印带有 int 的字符串构造函数
- spring-boot - 通过 JDBCTemplate 进行简单查询非常慢
- azure-devops-server - 需要帮助:我们无法在 azure devops 中导入和导出过程
- delphi - IdHTTP 如何发送 x-www-form-urlencoded 正文
- php - 在 Wordpress 中提交表单后显示的错误页面
- python - 如何根据其值沿 x 轴更改数据框绘图样式?
- laravel - Vue js 函数 countSubcategories() 返回 [object Promise]
- azure - 如何监控 Azure 中应用程序的活动?