首页 > 解决方案 > 将项目向右移动,然后将元素添加到数组

问题描述

我正在努力解决这个问题。我正在做一个项目,它需要我将数组中的所有元素向右移动,然后在索引 0 处添加新元素。我很清楚 ArrayLists 会使这更容易,但我想坚持使用普通数组这个

应该是什么样子

原始 {2, 3, 4, null}

新 {1, 2, 3, 4)

这是我拥有的当前代码。

while (scnr.hasNext()) {
        for (int i = 0; i < count; i++) {
          if (scnr.hasNext()) {
            data[i + 1] = data[i]; 
          }
        }
        data[0] = scnr.next();
        count++;
      }
      scnr.close();

我的问题是我可以添加前两个元素,但是第二个元素之后的元素都是一样的。即 {2, 3, 3, 3} 而不是 {1, 2, 3, 4}

注意:我使用 count 的原因是因为有许多我不想添加的空值并且我不希望它们增加运行时复杂性。

标签: java

解决方案


正如 karakfa 评论的那样,看起来您在数组中移动的方式是从左到右,这意味着您移动的第一个元素是成功的,但之后的所有元素都是相同的。

像这样想:

index  : 0 |  1|  2|...
element: 2 |  3|  4|...

如果从索引 0 开始,然后覆盖索引 1,则新数组为:

index  : 0 |  1|  2|...
element: 2 |  2|  4|...

如果您随后尝试将前一个值 (3) 复制到下一个索引,当它查找该 3 时,它会找到一个 2,因为您已经覆盖了 3!

走相反的路会更好。基本上你想反转你访问数组的方向。


推荐阅读