如何在数组中插入索引



当我打印此代码时,我在终端上得到的是{3,4,4,20}。我想在某个位置插入一个索引,然后将数组向右移动。当我移动数组中的元素时,它下降了10。如何修复此问题,使终端上打印的内容为{3,4,10,20}。谢谢

public static void main(String[] args) {
practice obj = new practice(5);
obj.insert(3);
obj.insert(10);
obj.insert(20);
obj.insertShift(4,1);
obj.print();

public void insertShift(int index, int pos){
sum[counter++] = index;  
for(int i=counter-1; i> pos; i--){   
sum[i]= sum[i-1];    
sum[pos]= index;
}
}
public class practice {
private int[] sum;
private int counter;
public practice(int counter) {
sum = new int[counter];
}

public void insert(int index) {
sum[counter] = index;
counter++;
if (counter == 0) {
int[] newArray = new int[counter * 2];
for (int i = 0; i < counter; i++) {
sum[i] = newArray[i];
}
// sum = newArray;
// System.out.println(counter);
}
}
public void insertAt(int index, int pos){
sum[counter] = index;
for(int i=pos; i<counter; i++){
// sum[i] = sum[i+1];
sum[pos]= index;
// newArray[pos] = index;
}
}
public void insertShift(int index, int pos){
sum[counter] = index;
for(int i=counter; i> pos; i--){
sum[i]= sum[i-1];
sum[pos]= index;
}

}
public void print () {
for (int i = 0; i < counter; i++) {
System.out.println(sum[i]);
}
}
}

要找到问题,请在一张纸上画画,并遵循代码的逻辑。

调用insertShift(4,1)时,数据如下:

sum = { 3, 10, 20, 0, 0 }
counter = 3
index = 4
pos = 1

这意味着:

┌────┬────┬────┬────┬────┐
│  3 │ 10 │ 20 │  0 │  0 │
└────┴────┴────┴────┴────┘
↑
counter
sum[counter++] = index;              // sum[3] = 4
// counter = 4
┌────┬────┬────┬────┬────┐
│  3 │ 10 │ 20 │  4 │  0 │           Why???
└────┴────┴────┴────┴────┘
↑
counter
for(int i=counter-1; i> pos; i--){   // i = 3
sum[i]= sum[i-1];                // sum[3] = sum[2]
┌────┬────┬────┬────┬────┐
│  3 │ 10 │ 20 │ 20 │  0 │
└────┴────┴────┴────┴────┘
sum[pos]= index;                 // sum[1] = 4
┌────┬────┬────┬────┬────┐
│  3 │  4 │ 20 │ 20 │  0 │           Oops! We just lost the value 10
└────┴────┴────┴────┴────┘
for(int i=counter-1; i> pos; i--){   // i = 2
sum[i]= sum[i-1];                // sum[2] = sum[1]
┌────┬────┬────┬────┬────┐
│  3 │  4 │  4 │ 20 │  0 │
└────┴────┴────┴────┴────┘
sum[pos]= index;                 // sum[1] = 4
┌────┬────┬────┬────┬────┐
│  3 │  4 │  4 │ 20 │  0 │           Nothing changed, value was already 4
└────┴────┴────┴────┴────┘
for(int i=counter-1; i> pos; i--){   // i = 1, loop ends

现在问问自己:为什么参数index的值被分配了不止一次?当方法结束时,值4应该只在数组中的一个位置,所以多次赋值似乎。。。过分的

最新更新