为啥插入数字会覆盖数字

为啥插入数字会覆盖数字

https://img1.sycdn.imooc.com//climg/62f31e58094a8f1c05930264.jpg

package 综合案例;

import java.util.Scanner;

public class lainXi {
  public int[] xcc() {

	  int []s=new int[10];
	  Scanner sc=new Scanner(System.in);
	  for(int i=0;i<s.length-1;i++) {
		  s[i]=sc.nextInt();
		  System.out.print("请输入第"+(i+1)+"个字符");
		  
	  
	  try{
		  s[i]=sc.nextInt();
	  }catch(java.util.InputMismatchException e) {
		      System.out.println("输入格式有误请输入数字,打二蛋屁股");
	               sc.next();
	                 i--;
	  }}for(int n:s)
	  System.out.println(n);return s;
	  
  }
  public void  jian (int n ,int[] f){

	   for(int i=0;i<n;i++) {
		System.out.println(f[i]+" ");
	  }System.out.println();
  }
  public void cha(int[]a,int b,int c) {
	  for(int i=a.length-1;i>c;i--) {
		  a[i]=a[i-1];
		 }a[c]=b;
  }
  public static void main(String[] args) {
		// TODO Auto-generated method stub
         lainXi scc=new lainXi();
         System.out.println(scc.xcc());
         int [] n=scc.xcc();
         scc.jian(n.length-1,n);
         Scanner sc=new Scanner("请输入要插入数据");
         int b=sc.nextInt();
          System.out.println("请输入要插入的位置");
          int c=sc.nextInt();
         scc.cha(n,b,c);
         scc.jian(n.length,n);
	}

}

为啥插入数字会覆盖数字

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小黑 2022-08-10 13:36:10

同学你好,是因为同学代码中

for(int i=a.length-1;i>c;i--) {
          a[i]=a[i-1];
     }
  }

是将数组中下标为i-1的数据赋值给下标为i的数据,所以下标为i-1的数据会覆盖掉下标为i的数据,当数组未满时将以上代码修改为:

for(int i=a.length-2;i>=c;i--) {
    a[i+1]=a[i];
   }
a[c]=b;

当数组已满时将以上代码修改为:

public int [] cha(int[]a,int b,int c) {
    //因为数组中的数据已满,定义一个比数组a的长度大1的数组
    int []arr=new int[a.length+1];
    //将数组a的数据放入数组arr
    for (int i = 0; i < a.length; i++) {
        arr[i]=a[i];
    }
    //将arr数组中的数据从下标c开始往后移动
    for(int i=arr.length-2;i>=c;i--) {
        arr[i+1]=arr[i];
       }
    //将数据插入到下标c的位置
    arr[c]=b;
    return arr;
}

祝学习愉快!

  • 提问者 不惧岁月 #1

    老师第二段  i=8
    i>=c
    当8>c不是停止循环了吗,那这样数不就不移位了,为啥这个看不懂。
    还有第三段代码能讲解一下吗?

    2022-08-10 15:24:00
  • 好帮手慕小黑 回复 提问者 不惧岁月 #2

    同学你好,老师在代码中编写的是i>=c,当i=8,c=8时8==c,数组中的数据向后移动一位。

    在第三段代码中,当数组中的数据已经全部插入完毕的时候,数组中的数据已经不可以再插入,否则会造成最后一个数据丢失。

    1. 此时可以定义一个比当前数组的长度大于1的数组,并将原先数组(a)的数据放入新定义的数组(arr);

    2. 将arr数组中的数据从下标c开始往后移动;

    3. 将数据插入到下标c的位置。

    祝学习愉快!

    2022-08-10 15:41:37
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师