3--在指定位置处插入数据的方法不太明白,请老师指导

3--在指定位置处插入数据的方法不太明白,请老师指导

package com.imooc2;

import java.util.Scanner;

public class ArrayManage {
	
	
	 //显示提示信息的方法
    public void cue() {
        System.out.println("********************************************");
        System.out.println("           "+"1--插入数据");
        System.out.println("           "+"2--显示所有数据");
        System.out.println("           "+"3--在制定位置处插入数据");
        System.out.println("           "+"4--查询能被3整除的数据");
        System.out.println("           "+"0--退出");
        System.out.println("********************************************");
        System.out.println("请输入对应的数字进行操作:");    
    }
     
    // 1--插入数据的方法
    public int[] insertDate() {
        Scanner sc=new Scanner(System.in);
        int[] arr=new int[10];
        //输入1——9的9个数字
        for(int i=0;i<arr.length-1;i++) {
            System.out.println("请输入第"+(i+1)+"个数据:");
            arr[i]=sc.nextInt();
            if(arr[i]==0) {
                System.out.print("同学,输入的数据不能为0!"+"     ");
                System.out.println("请重新输入第"+(i+1)+"个数据:");
                arr[i]=sc.nextInt();
            }
            }
        //显示输入的数组元素
        System.out.println("数组元素为:");
        for(int n=0;n<arr.length-1;n++) {
            System.out.print(arr[n]+"  ");
        }
        System.out.println();
        return arr;
    }
     
     
    //2--显示所有数据的方法
    public void showDate(int[] a,int length) {
        System.out.println("数组元素为:");
        for(int i=0;i<length;i++) {
            if(a[i]!=0) {
                System.out.print(a[i]+"   ");
            }else {
                System.out.print("  ");
            }   
        }
        System.out.println();
    }
     
     //3--在指定位置插入数据的方法
    public void insertAtArray(int[] a,int n,int k) {
        Scanner sc1=new Scanner(System.in);
        //int b=sc1.nextInt();
        System.out.println("请输入要插入的数据:");
        n=sc1.nextInt();
        System.out.println("请输入要插入数据的位置:");
        k=sc1.nextInt();
        for(int i=a.length-1;i>=k;i--) {
            a[i]=a[i-1];    
        }
        a[k-1]=n;
    }
     
      
    //4--查询能被3整除的数据的方法
    public void divThree(int[] a) {
    	int b=0;
        System.out.println("能被3整除的数据为:");
        for(int i=0;i<a.length;i++) {
            if(a[i]%3==0) {
            	b+=1;
                System.out.print(a[i]+"   ");   
            }
        }
        if(b==0) {
        	System.out.println("没有能被3整除的数据!");
        }
        System.out.println();
    }
      

	public static void main(String[] args) {
		// 定义一个数组
        int[] arr1=new int[10];
        boolean flag=true;
        //创建方法所在类的对象
        ArrayManage am=new ArrayManage();
        while(flag) {
            am.cue();
            Scanner sc2=new Scanner(System.in);
            int p=sc2.nextInt();
            switch(p) {
            case 1:
                //赋值并调用插入数据的方法insertDate
                arr1=am.insertDate();break;
                  
                //调用显示所有数据的方法
            case 2:
                am.showDate(arr1,arr1.length);break;
                  
                //调用在指定位置处插入数据的方法
            case 3:
                am.insertAtArray(arr1,10,9);
                am.showDate(arr1,arr1.length);
                break;
                  
                //调用能被3整除的方法
            case 4:
                am.divThree(arr1);break;            
                  
            case 0:
                System.out.println("退出");
                  
                flag=false;
                break;
                  
            default:
                System.out.println("0--4以外的数字无效,请重新输入:");
                break;
            }   
        }

	}

}

在指定位置插入数据这个方法中的for循环不太明白是怎么回事,求运行逻辑。另外还有在case 1中:arr1=am.insertDate();break;    调用方法insertDate()的结果怎么可以直接赋值给数据arr1呢?求解释

正在回答

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

1回答

1、关于在指定位置插入的方法:

我们之前在插入数据的时候,插入了9个,其实最后 一个还是空着的,

比如,我想在第2个位置插入数据。则把第二个数字以及第二个数字以后的都往后移一位。

我们从数组的最后一个元素开始移动,把前一个数据赋值到后边的位置,直到移动到你想要插入数据的位置,这个时候,你再把你想要插入的数据赋值在你想要插入的位置就可以了。

http://img1.sycdn.imooc.com//climg/5c3db9eb00013a8603120120.jpg

2、同学是想用另外一种方式,直接调用insertDate()后,arr1就自动被赋值的方法么?

同学可以在insertDate()中传入参数,变成 

public void  insertDate( int[] arr){

//在方法中,不用重新new 一个int数组了,直接用传递过来的参数arr进行插入操作就可以了

//也不用再写返回值了,它直接修改的就是传进来的arr1数组。

}

调用这个方法的时候,把arr1传给这个方法

am.insertDate(arr1);

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 慕用6373601 提问者 #1
    老师,在指定位置插入数据的for循环中,i>=k感觉不对啊,应该是i>=k-1吧?比如,本例中,数组长度为10,i的对大大值为9,如果要在最后一位插入数据,则k=10,不满足9>=10啊,求老师解答,谢谢!
    2019-01-15 21:07:29
  • 好帮手慕阿莹 回复 提问者 慕用6373601 #2
    其实是这次作业中没有做具体的规定,比如,你说我要在最后一位插入数据,你可以默认输入9,如果你说我就是想让第10个数表达为10.那同学应该把传进来的k都要减一。例如a[k-1]=n. 这样同学输入的第1个位置插入时,才是在a[0]的位置。 这个是否减一,这里不做要求,同学按照自己的喜好来就可以的。所以按照同学的理解也是没有问题的。 如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
    2019-01-16 09:34:45
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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