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