添加元素以启动数组。

时间:2013-12-10 00:27:28

标签: java arrays

我正在练习什么是非常基本的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; 

 }

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

3 个答案:

答案 0 :(得分:2)

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

你必须向后遍历数组,这样一个班次不会意外地使用前一班次的结果。

从索引data.length - 1开始,从位置i - 1复制到位置i,确保最后一次迭代是i 1。< / p>

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

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

答案 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;
}

答案 2 :(得分: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;
    }
  }
}