老师好,统计部门人数和空指针的问题。

老师好,统计部门人数和空指针的问题。

老师你好,统计部门人数和空指针,调了很久实在做不出来,请问下这两个怎么做呢?哭戚戚

另外我的代码还有什么地方需要修改呢

package com.fiona.javaObjectOriented.day12office;

/**
 * 部门类
 */
public class BuMen {
//  成员属性:部门编号、部门名称、员工数组、统计部门中的员工个数(统计变量)
    private String bmId;
    private String bmName;
    private YuanGong [] myYuanGong;
    private int bmNum;

    //无参构造
    public BuMen(){ }

    //带参构造
    public BuMen(String bmId, String bmName) {
        this.setBmId(bmId);
        this.setBmName(bmName);
    }

    public String getBmId() {
        return bmId;
    }

    public void setBmId(String bmId) {
        this.bmId = bmId;
    }

    public String getBmName() {
        return bmName;
    }

    public void setBmName(String bmName) {
        this.bmName = bmName;
    }

    public YuanGong[] getMyYuanGong() {
        return myYuanGong;
    }

    public void setMyYuanGong(YuanGong[] myYuanGong) {
        this.myYuanGong = myYuanGong;
    }

    public int getBmNum() {
        return bmNum;
    }

    public void setBmNum(int bmNum) {
        this.bmNum = bmNum;
    }

    //统计该部门员工个数
    public void  addNum(YuanGong  yg){
        for(int i=0;i<this.getMyYuanGong().length;i++){
            if(this.getMyYuanGong()[i]==null){
                this.getMyYuanGong()[i]=yg;
                this.bmNum=i+1;
                return;
            }
        }
    }

}
package com.fiona.javaObjectOriented.day12office;

/**
 * 职务类
 */
public class ZhiWu {
    //职务编号、职务名称
    private String zwId;
    private String zwName;

    //无参构造方法
    public ZhiWu(){ }

    //有参构造方法:包含职务编号、职务名称
    public ZhiWu(String zwId, String zwName) {
        this.setZwId(zwId);
        this.setZwName(zwName);
    }

    public String getZwId() {
        return zwId;
    }

    public void setZwId(String zwId) {
        this.zwId = zwId;
    }

    public String getZwName() {
        return zwName;
    }

    public void setZwName(String zwName) {
        this.zwName = zwName;
    }

    public String info(){
        String str="职务信息如下:\n职务编号:"+this.getZwId()+"\n职务名称:"+this.getZwName();
        return str;
    }
}
package com.fiona.javaObjectOriented.day12office;

/**
 * 员工类:
 */
public class YuanGong {
    //员工姓名、工号、年龄、性别、所属部门、职务信息
    private String ygNmae;
    private String ygID;
    private int ygAge;
    private String ygSex;
    private BuMen ygbumen;
    private ZhiWu ygzhiwu;

    //无参构造方法
    public YuanGong(){}

    //有参构造方法:工姓名、工号、性别、年龄、部门信息、职务信息
    public YuanGong(String ygNmae, String ygID, int ygAge, String ygSex,BuMen ygbumen,ZhiWu ygzhiwu) {
        this.setYgNmae(ygNmae);
        this.setYgID(ygID);
        this.setYgAge(ygAge);
        this.setYgSex(ygSex);
        this.setYgbumen(ygbumen);
        this.setYgzhiwu(ygzhiwu);
    }

    public String getYgNmae() {
        return ygNmae;
    }

    public void setYgNmae(String ygNmae) {
        this.ygNmae = ygNmae;
    }

    public String getYgID() {
        return ygID;
    }

    public void setYgID(String ygID) {
        this.ygID = ygID;
    }

    public int getYgAge(int ygAge) {
        return ygAge;
    }

//设定方法限定年龄只能是18--65之间,反之则设置默认为18岁
    public void setYgAge(int ygAge) {
        if(ygAge<18||ygAge>65)
            this.ygAge=18;
        else
            this.ygAge=ygAge;
    }

    public String getYgSex() {
        return ygSex;
    }

    //设定方法限定性别只能是“男”或者“女”,反之则设置默认为"男"
    public void setYgSex(String ygSex) {
        if(ygSex=="男"||ygSex=="女")
            this.ygSex = ygSex;
        else
            this.ygSex="男";
    }

    public int getYgAge() {
        return ygAge;
    }

    public BuMen getYgbumen() {
        return ygbumen;
    }

    public void setYgbumen(BuMen ygbumen) {
        this.ygbumen = ygbumen;
    }

    public ZhiWu getYgzhiwu() {
        return ygzhiwu;
    }

    public void setYgzhiwu(ZhiWu ygzhiwu) {
        this.ygzhiwu = ygzhiwu;
    }

    //员工自我介绍的方法,将员工信息作为字符串返回
    public String info( ){
        String str = "姓名:"+this.getYgNmae()+
                "\n工号:"+this.ygID+
                "\n性别:" +this.ygSex+
                "\n年龄:"+this.ygAge+
                "\n职务:"+this.ygbumen.getBmName()+this.ygzhiwu.getZwName();
        return str;
    }

}
package com.fiona.javaObjectOriented.day12officeTest;

import com.fiona.javaObjectOriented.day12office.BuMen;
import com.fiona.javaObjectOriented.day12office.YuanGong;
import com.fiona.javaObjectOriented.day12office.ZhiWu;

public class Test {
    public static void main(String[] args) {
        //初始化部门
        BuMen bm1=new BuMen("D001","人事部");
        BuMen bm2=new BuMen("D002","市场部");

        //初始化职务
        ZhiWu zw1 = new ZhiWu("P001","经理");
        ZhiWu zw2 = new ZhiWu("P002","助理");
        ZhiWu zw3 = new ZhiWu("P003","职员");

        //初始化员工
        YuanGong yg1 = new YuanGong("张铭","S001",29,"男",bm1,zw1);
        YuanGong yg2 = new YuanGong("李艾爱","S002",21,"女",bm1,zw2);
        YuanGong yg3 = new YuanGong("孙超","S003",29,"男",bm1,zw3);
        YuanGong yg4 = new YuanGong("张美美","S004",26,"女",bm2,zw3);
        YuanGong yg5 = new YuanGong("蓝迪","S005",37,"男",bm2,zw1);
        YuanGong yg6 = new YuanGong("米莉","S006",24,"女",bm2,zw3);

        //输出员工信息
        System.out.println(yg1.info()+"\n==============================");
        System.out.println(yg2.info()+"\n==============================");
        System.out.println(yg3.info()+"\n==============================");
        System.out.println(yg4.info()+"\n==============================");
        System.out.println(yg5.info()+"\n==============================");
        System.out.println(yg6.info()+"\n==============================");

        //人事部添加员工
        bm1.addNum(yg1);
        bm1.addNum(yg2);
        bm1.addNum(yg3);
        System.out.println(bm1.getBmName()+"总共有"+bm1.getBmNum()+"名员工");

        //市场部添加员工
        bm1.addNum(yg4);
        bm1.addNum(yg4);
        bm1.addNum(yg4);
        System.out.println(bm2.getBmName()+"总共有"+bm2.getBmNum()+"名员工");

    }

}


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

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

1回答
好帮手慕阿慧 2020-04-20 12:01:02

同学你好,

1、建议在部门类的getMyYuanGong中对员工数组进行初始化,这样就不会出现空指针异常了。

如下图:

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

2、在统计该部门员工个数方法中,找到空位后,建议设置员工对象的部门属性为当前部门对象,防止员工创建对象时传入的部门对象与部门中记录的员工对象不一致。

如下图:

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

3、建议使用equals()方法比较字符串内容。

如下图:

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

4、测试方法中,市场部添加员工应该是bm2.addNum,而不是bm1.addNum。

如下图:

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

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

  • 老师 你讲的第二个设置当前员工对象为该当前部门对象还是不太懂,不要这个条件也能正常输出啊
    2020-04-25 15:05:57
  • 同学你好,设置当前员工对象为该当前部门对象后,可以不用在员工里边设置部门对象了,设置一次就可以。 this是指当前的部门对象,例如,bm1 调用这个addNum方法,则被添加的这个员工对象顺便就在这个方法里边,把这个bm1 通过员工的set方法设置到自己的BuMen ygbumen 这个属性里了。 如果员工的构造方法中传入了bm1,可以不用设置这句。这里老师是为了双层保险,才加了这句,同学也可以不用加。 如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
    2020-04-25 19:07:29
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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