老师请见正文,这里哒不下这么多字~

老师请见正文,这里哒不下这么多字~

我先把我整个我觉得正确的代码放上来~

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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
package com.imooc.model;
 
/**
 * Staff员工类
 */
public class Staff {
 
    // 成员属性:姓名、工号、年龄、性别、所属部门、职务信息
    private String staffName;
    private String staffNo;
    private int staffAge;
    private String staffSex;
    private Department staffDepartment; // 将Department作为员工的成员属性存在
    private Position staffPosition; //// 将Position作为员工的成员属性存在
 
    // 无参构造方法
    public Staff() {          //this()
         
        this(null,null,18,"男",null,null);
         
        /*上面的相当于下面的简化版
        this.setStaffNo(null);
        this.setStaffAge(18);
        this.setStaffSex("男");
        this.setStaffDepartment(null);
        this.setStaffPosition(null);*/
    }
 
    /**
     * 多参构造方法,实现对全部属性赋值
     * @param staffName      员工姓名
     * @param staffNo        员工工号
     * @param staffAge       员工年龄
     * @param staffSex       员工性别
     * @param department     所属部门
     * @param position       职务信息
     */
    public Staff(String staffName, String staffNo, int staffAge, String staffSex, Department staffDepartment,
            Position staffPosition) {
        this.setStaffName(staffName);
        this.setStaffNo(staffNo);
        this.setStaffAge(staffAge);
        this.setStaffSex(staffSex);
        this.setStaffDepartment(staffDepartment);
        this.setStaffPosition(staffPosition);
    }
 
    /**
     * 多参构造方法,实现对员工姓名、工号、年龄、性别以及职务信息的赋值(符合题目要求)
     * @param staffName
     * @param staffNo
     * @param staffSex
     * @param staffAge
     * @param staffPosition
     */
    public Staff(String staffName, String staffNo, int staffAge, String staffSex, Position staffPosition) {
         
        this(staffName,staffNo,staffAge,staffSex,null,staffPosition);
     
    }
 
    // 设置属性的set/get方法
     
    public void setStaffName(String staffName) {
        this.staffName = staffName;
    }
 
    public String getStaffName() {
        return this.staffName;
    }
 
    public void setStaffNo(String staffNo) {
        this.staffNo = staffNo;
    }
 
    public String getStaffNo() {
        return staffNo;
    }
 
    /**
     * 给年龄赋值,限定在18-65之间,否则默认为18
     * @param staffAge 传入的年龄
     */
    public void setStaffAge(int staffAge) {
        this.staffAge = staffAge;
    }
 
    public int getStaffAge() {
        if (staffAge < 18 || staffAge > 65) {
            this.staffAge = 18;
        } else {
            this.staffAge = staffAge;
        }
        return this.staffAge;
    }
 
    /**
     * 给性别赋值,设定性别只能为“男”或“女”,否则默认为“男”
     * @param staffSex 
     */
    public void setStaffSex(String staffSex) {
        this.staffSex = staffSex;
    }
 
    public String getStaffSex() {
        if (staffSex=="女"){
            this.staffSex = "女";
        } else {
            this.staffSex = "男";
        }
        return this.staffSex;
    }
 
    public void setStaffDepartment(Department staffDepartment) {
        this.staffDepartment = staffDepartment;
    }
 
    /**
     * 获取Department对象,如果没有实例化,先实例化然后返回
     * @return Department对象信息
     */
    public Department getStaffDepartment() {
        if (this.staffDepartment == null) {
            this.staffDepartment = new Department();
        }
        return staffDepartment;
    }
 
    public void setStaffPosition(Position staffPosition) {
        this.staffPosition = staffPosition;
    }
 
    /**
     * 获取Position对象,如果没有实例化,先实例化然后返回
     * @return Position对象信息
     */
    public Position getStaffPosition() {
        if (this.staffPosition == null) {
            this.staffPosition = new Position();
        }
        return staffPosition;
    }
 
    /**
     * 员工自我介绍的方法
     
     * @return 员工自我介绍的信息,包括姓名、工号、年龄、性别以及职务类中的职务名称
     */
    public String introduction() {
        String str = "姓名:" + this.getStaffName() + "\n工号:" + this.getStaffNo() + "\n性别:"
                + this.getStaffSex() + "\n年龄:" + this.getStaffAge() + "\n职务:"
                + this.getStaffDepartment().getDepartmentName() + this.getStaffPosition().getPositionName();
        return str;
    }
 
}
 
package com.imooc.model;
 
/**
 * Department部门类
 */
public class Department {
 
    // 成员属性:部门编号、部门名称、员工数组、统计部门中的员工个数
    private String departmentNo;
    private String departmentName;
    private Staff[] myStaffs;
    private int staffNum;
 
    // 无参构造方法 +自己设定的默认值
    public Department() {
        this(null, null, null,0);
    }
 
    /**
     * 多参构造方法,实现对全部属性赋值
     * @param departmentNo   部门编号
     * @param departmentName 部门名称
     * @param myStaffs       员工数组
     * @param staffNum       统计部门中员工的人数
     */
    public Department(String departmentNo, String departmentName, Staff[] myStaffs, int staffNum) {
        this.setDeparmentNo(departmentNo);
        this.setDepartmentName(departmentName);
        this.setMyStaffs(myStaffs);
        this.getStaffNum(); //因为staffNum不是我定义的,所以我感觉这里用get比较好,我把set方法去掉了
    }
 
    /**
     * 单一参数构造方法,实现对Department部门名称的赋值(符合题目要求)
     
     * @param departmentName部门名称
     */
    public Department(String departmentName) {
        this(null, departmentName, null,0);
    }
 
    // 设置属性的set/get方法
    public void setDeparmentNo(String departmentNo) {
        this.departmentNo = departmentNo;
    }
 
    public String getDepartmentNo() {
        return this.departmentNo;
    }
 
    public void setDepartmentName(String departmentName) {
        this.departmentName = departmentName;
    }
 
    public String getDepartmentName() {
        return this.departmentName;
    }
 
    public void setMyStaffs(Staff[] myStaffs) {
        this.myStaffs = myStaffs;
    }
 
    /**
     * 获取部门内的员工信息,如果保存员工的信息数组未被初始化,则先初始化长度为200
     
     * @return 保存的员工数组信息
     */
    public Staff[] getMyStaffs() {
        if (this.myStaffs == null) {
            this.myStaffs = new Staff[10];
        }
        return myStaffs;
    }
     
    public int getStaffNum() {
        return this.staffNum;
    }
      
    /**
     * 将输入的值保存到数组中的方法 1.将员工保存到数组中 2.将员工个数保存在staffNum中
     */
 
    public void addStaff(Staff sta) {
        for(int i=0; i<this.getMyStaffs().length;i++) {
            if(this.getMyStaffs()[i]==null) {
                sta.setStaffDepartment(this);
                this.getMyStaffs()[i] = sta;
                this.staffNum = i+1;
                return;
            }
        }
         
    }
 
}
 
package com.imooc.model;
 
/**
 * Position职务类
 */
public class Position {
 
    // 成员属性:
    private String positionNo;
    private String positionName;
 
    //无参构造方法
    public Position() {
        this(null,null);
    }
 
    /**
     * 多参构造方法,实现对全部属性进行赋值
     * @param positionNo 职务编号
     * @param positionName 职务名称
     */
    public Position(String positionNo, String positionName) {
        this.setPositionNo(positionNo);
        this.setPositionName(positionName);
    }
     
    /**
     * 单参构造方法,实现对职务名称的赋值(符合题目要求)
     * @param positionName 职务名称
     */
    public Position(String positionName) {
        this(null,positionName);
    }
 
    // 设置属性的set/get方法
    public void setPositionNo(String positionNo) {
        this.positionNo = positionNo;
    }
 
    public String getPositionNo() {
        return this.positionNo;
    }
 
    public void setPositionName(String positionName) {
        this.positionName = positionName;
    }
 
    public String getPositionName() {
        return this.positionName;
    }
 
}
 
package com.imooc.test;
import com.imooc.model.Staff;
import com.imooc.model.Department;
import com.imooc.model.Position;
public class Test {
    public static void main(String[] args) {
         
        Position p1 = new Position("经理");
        Position p2 = new Position("助理");
        Position p3 = new Position("职员");
        Department d1 = new Department("人事部");
        Department d2 = new Department("市场部");
        Staff sta1 = new Staff("张铭""S001"29"男", p1);
        d1.addStaff(sta1);
        Staff sta2 = new Staff("李艾爱""S002"21"女", p2);
        d1.addStaff(sta2);
        Staff sta3 = new Staff("孙超""S003"29"男", p3);
        d1.addStaff(sta3);
        Staff sta4 = new Staff("张美美""S004"26"女", p3);
        d2.addStaff(sta4);
        Staff sta5 = new Staff("蓝迪""S005"37"男", p1);
        d2.addStaff(sta5);
        Staff sta6 = new Staff("米莉""S006"24"女", p3);
        d2.addStaff(sta6);
         
        System.out.println("===================================");
        System.out.println(sta1.introduction());
        System.out.println("===================================");
        System.out.println(sta2.introduction());
        System.out.println("===================================");
        System.out.println(sta3.introduction());
        System.out.println("===================================");
        System.out.println(sta4.introduction());
        System.out.println("===================================");
        System.out.println(sta5.introduction());
        System.out.println("===================================");
        System.out.println(sta6.introduction());
        System.out.println("===================================");
        System.out.println(d1.getDepartmentName() + "总共有" + d1.getStaffNum() + "名员工");
        System.out.println(d2.getDepartmentName() + "总共有" + d2.getStaffNum() + "名员工");
         
         
    }
}
 
问题1:我想不用for循环,用数组a[i].length代替属性staffnum,应该怎么实现呢?
我原本想用这个:
public int addStaffNum(Staff sta){
   sta.setStaffDeparment(this);
   int i = this.getMyStaff().length;
   this.getMyStaff()[i] = sta;
   return i+1;
 结果发现前面已经定义了数组长度,简直吐血。。。
 public Staff[] getMyStaffs() {
        if (this.myStaffs == null) {
            this.myStaffs = new Staff[10];
        }
        return myStaffs;
    }
请问老师有可以不用声明的方法来操作吗?
 
问题2:用this()代替构造方法中的内容这个做法叫做什么呀?是属于方法重载吗?
问题3:我为什么想用数组a[i].length代替属性staffnum是因为,如果我们都知道有多少人了,那直接在staffnum里定义数值就好了呀,我觉得setstaffnum这个方法数多余的,所以我没写。


正在回答

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

1回答

同学你好,1、同学所说的方法并不能实现,因为在数组的声明中,如果只定义不赋值就必须要指定长度。

    2、this()表示当前对象。this(null, null, null,0); 是设置元素的默认值,但是成员方法有默认值,可以不设置。

    3、现阶段是数组,必须指定长度,在后面学习了集合,就可以不指定长度了。

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

  • Heijyu 提问者 #1
    好的~等以后学了集合再来看这道题~this()表示当前对象。this(null, null, null,0); 是设置元素的默认值,但是成员方法有默认值,可以不设置。是的,电脑是有默认值,不过我做程序员的朋友说最好不要让电脑来定义,把掌控权放在人为上比较好,这样能够知道你自己定义的默认值是什么~
    2020-05-23 12:50:59
  • 好帮手慕小班 回复 提问者 Heijyu #2
    同学你好,同学的说法也是正确的,这只是一个编程的小习惯,都是可以的。很棒呐 继续加油 祝:学习愉快~
    2020-05-23 15:29:31
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

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

公众号

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

在线咨询

领取优惠

免费试听

领取大纲

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