2013-12-10 17 views
3

我正在练习什么是非常基本的java数组练习,而且我很难绕过如何将一个元素插入到数组的开头,然后将其余元素移到右侧。因此,如果数组没有超过它的最大尺寸,在数组前面插入一个z,j,a,v,a会使z,j,a,v,a。添加元素以开始数组。

我知道如何与数组列表做到这一点,我只是有困难的时候得到逻辑与阵列正确。这是我到目前为止有:

public void addFront(char ch) 
{ 
    for(int i = 1; i < data.length-1; i++){ 
    char temp = data[i - 1]; 
    data[i] = temp; 
    } 
    data[0] = ch; 

} 

好像我需要一个临时变量,但我不会在这种情况下正确地使用它。任何输入将不胜感激!

+0

为什么不'ArrayList'? – nhgrif

+0

我知道这将如何与ArrayLists一起工作,但我正在练习数组并试图围绕如何与数组一起工作来围绕我的大脑。 – user3029486

+1

@nhgrif为什么不是'Array'? –

回答

2

让我们来看看你的当前循环在做什么。它将位置i - 1中的字符复制到当前位置。但下一个循环会将其从(当前)i复制到(当前)i + 1。它只会将第一个字符复制到数组中除最后一个位置之外的每个位置。

您必须通过阵列向后遍历,这样一个转变不小心使用前一移位的结果。

开始在指数data.length - 1,并从i - 1位置复制到位置i,确保最后一次迭代时i1

此外,不需要临时变量。您可以直接复制的价值,即

data[i] = data[i - 1]; 
1

开始在阵列的后端。

如果移动元素0到1元,那么,元件1到2元......嗯,你已经复制元素0到元素1 ....所以,现在你只复制元素0整个阵列上。

开始在阵列转移一切的权利,你做完这些后,接着的后端,在前面插入新的元素。

public void addFront(char ch) { 
    for(int i = data.length-1; i > 0; --i) { 
     data[i] = data[i-1]; 
    } 
    data[0] = ch; 
} 
0

你并不需要一个临时变量插入,因为这说明应该工作...

public void addFront(char ch) 
{ 
    for(int i = data.length - 1; i > 0; i--){ // start at the end. 
    data[i] = data[i-1]; // move every element up 1... that is set the current 
          // element to the prior element. 
    } 
    for (int i = data.length - 1; i >= 0; i--) { 
    if (data[i] == null) { // find the first blank... 
     data[i] = ch; // set the initial value. 
     break; 
    } 
    } 
} 
+0

为什么我们遍历整个数组两次? – nhgrif

+0

@nhgrif我不知道我们是从0开始的...这个问题有点含糊......显然这里假定数据是一个'Character []'。 –

+0

这很好,如果你想这样做。我仍然不明白为什么我们要重复两遍?为什么不在第一次'for'循环中首次遇到null(移动后)数据[i] = ch;'? – nhgrif