Java 如何在数组中插入索引
当我打印这个代码时,我在终端上得到的是{3,4,4,20}。我想在某个位置插入索引,然后将数组向右移动。当我移动数组中的元素时,它下降了10。我如何解决这个问题,使终端上打印的是{3,4,10,20}。谢谢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
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
应该只在数组中的一个位置,所以多次分配值似乎太过了。在插入
方法中,由于计数器
永远不能为负,这意味着rcounter++
之后的第八个计数器将始终为1或更高,从不为0,因此if(counter==0)
永远不会是真的。@Andreas问题出在insertShift方法中。我想在位置1处添加数字4。因此,我想打印3,4,10,20。当我运行代码时,得到的是3,4,4,20。然后在一张纸上画图,按照代码执行的逻辑,这样你就可以知道哪里出了问题。你想知道吗插入图元还是替换现有图元?