2017-10-09 73 views
-4

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

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

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

任何指导将不胜感激。

+0

索引4应该发生什么?它应该去0吗?还是应该转向索引5? – Frakcool

+0

索引4应该移动到索引5,尽管没有索引4 – Eliyo

+0

@Eliyo索引4不应该移动到索引5.没有人能做到这一点,因为这将是'ArrayIndexOutOfBoudsException'。 – user3437460

回答

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的lenght内部和i + 1将是0

另外请注意,我创建了一个阵列,用于结果,因为否则你需要保持索引的最后一个swaped int的引用来设置,因为你会用循环取代它的值。

+1

我认为你的意思是在你的for循环里面的'p.length'。 –

0

首先,您需要更正for循环的上限。如你所知,你会得到ArrayIndexOutOfBoundsException,因为i + 1将会超过最后一个元素。其次,如果您想将元素从i移动到i + 1,则必须向后循环。否则,您将继续覆盖下一个元素。如果你看不到,试着在纸上做。

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

最后,“代码不想运行”是一个完全没用的信息。你如何运行它,你有什么例外,你尝试了什么?