Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在数组中插入索引_Java_Arrays - Fatal编程技术网

Java 如何在数组中插入索引

Java 如何在数组中插入索引,java,arrays,Java,Arrays,当我打印这个代码时,我在终端上得到的是{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); o

当我打印这个代码时,我在终端上得到的是{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]);
    }
 }
 }
publicstaticvoidmain(字符串[]args){
实践obj=新实践(5);
obj.插入(3);
obj.插入(10);
对象插入(20);
对象插入移位(4,1);
obj.print();
公共void insertShift(整数索引,整数位置){
总和[计数器++]=索引;
对于(inti=counter-1;i>pos;i--){
和[i]=和[i-1];
总和[pos]=指数;
}
}
公共课堂实践{
私人整数[]和;
专用int计数器;
公共机构(国际柜台){
总和=新整数[计数器];
}
公共空白插入(整数索引){
总和[计数器]=索引;
计数器++;
如果(计数器==0){
int[]newArray=newint[计数器*2];
对于(int i=0;i
要找到问题,请在一张纸上画图,然后按照代码的逻辑进行操作

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

sum={3,10,20,0,0}
计数器=3
指数=4
位置=1
这意味着:

┌────┬────┬────┬────┬────┐
│  3.│ 10│ 20│  0│  0│
└────┴────┴────┴────┴────┘
↑
柜台
sum[counter++]=index;//sum[3]=4
//计数器=4
┌────┬────┬────┬────┬────┐
│  3.│ 10│ 20│  4.│  0│           为什么?
└────┴────┴────┴────┴────┘
↑
柜台
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│           哎呀!我们刚刚丢失了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│           未更改,值已为4
└────┴────┴────┴────┴────┘
for(int i=counter-1;i>pos;i--){//i=1,循环结束


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

插入
方法中,由于
计数器
永远不能为负,这意味着r
counter++
之后的第八个计数器将始终为1或更高,从不为0,因此
if(counter==0)
永远不会是真的。@Andreas问题出在insertShift方法中。我想在位置1处添加数字4。因此,我想打印3,4,10,20。当我运行代码时,得到的是3,4,4,20。然后在一张纸上画图,按照代码执行的逻辑,这样你就可以知道哪里出了问题。你想知道吗插入图元还是替换现有图元?