首页 > 解决方案 > 如何在数组中插入索引

问题描述

当我打印此代码时,我在终端上得到的是 {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]);
    }
 }
 }

标签: javaarrays

解决方案


要找到问题,请在一张纸上画,然后按照代码的逻辑。

调用时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应该只在数组中的一个位置,因此多次分配该值似乎......过度。


推荐阅读