【问题标题】:repeatedly moving elements in an array by 1 index [duplicate]将数组中的元素重复移动 1 个索引 [重复]
【发布时间】:2018-03-21 01:40:37
【问题描述】:

我希望我能得到一些帮助,关于如何移动数组的元素,一个索引。这样 Array[0] 位于 Array[1] 位置,而 Array[1] 位于 Array[2] 位置,依此类推。到目前为止我不想运行的代码:

int[] p = {1, 2, 3, 4, 5};

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

任何指导将不胜感激。

【问题讨论】:

  • 索引4应该怎么办?它应该变成0吗?还是应该移到索引 5?
  • 索引 4 应该移动到索引 5,即使没有索引 5
  • @Eliyo 索引 4 永远不应移动到索引 5。没有人可以做到这一点,因为那将是 ArrayIndexOutOfBoudsException。

标签: java arrays


【解决方案1】:

最简单的是使用循环计数器

int[] p = {1, 2, 3, 4, 5};
int[] r = new int[p.length];
for(int i = 0; i < p.length; i++) {
    r[(i + 1) % p.length] = p[i];
}

这确保索引将在 p.lenght 的长度内,并且 i+1 将为 0

还请注意,我为结果创建了一个数组,否则您需要在要设置的索引处保留最后一个交换的 int 的引用,因为您将循环替换它的值。

【讨论】:

  • 我认为你的意思是 p.length 在你的 for 循环内的行中。
【解决方案2】:

首先,您需要更正 for 循环中的上限。当你拥有它时,你会得到 ArrayIndexOutOfBoundsException,因为 i + 1 将超过最后一个元素。

其次,如果要将元素从 i 移动到 i+1,则必须向后循环。否则,您将继续覆盖下一个元素。如果看不到,请尝试在纸上进行。

第三,您可能想要使用 System.arrayCopy,它几乎肯定会更快。

最后,“代码不想运行”是完全无用的信息。你如何运行它,你得到了什么异常,你尝试了什么?

【讨论】:

    猜你喜欢
    • 2013-08-07
    • 2015-04-18
    • 1970-01-01
    • 2022-01-18
    • 2012-05-13
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    相关资源
    最近更新 更多