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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
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下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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