统计员工个数的方法

统计员工个数的方法

package com.imooc.renyuan;

public class Bumen {
	//属性
    private int bmNumber;
    private String bmName;
    private Yuangong[] yuangong;
    int count;
    //构造方法
    public Bumen(int bmNumber,String bmName) {
    	this.setBmNumber(bmNumber);
    	this.setBmName(bmName);
    }
    //构造set/get方法
    public void setBmNumber(int bmNumber) {
    	this.bmNumber=bmNumber;
    }
    public int getBmNumber() {
    	return bmNumber;
    }
    public void setBmName(String bmName) {
    	this.bmName=bmName;
    }
    public String getBmName() {
    	return bmName;
    }
    public void setYuangong(Yuangong[] yuangong) {
    	this.yuangong=yuangong;
    }
    public Yuangong[] getYuangong() {
    	if(this.yuangong==null) {
    		this.yuangong=new Yuangong[200];
    	}
    	return yuangong;
    }
    public void setCount(int count) {
    	this.count=count;
    }
    public int getCount() {
    	return count;
    }
    //统计该部门员工个数的方法
    public void addNumber(Yuangong yuangong) {
    	for(int i=0;i<this.getYuangong().length;i++) {
    		if(this.getYuangong()[i]==null) {
    			 yuangong.setBmName(this);
    			this.getYuangong()[i]=yuangong;
    			this.count=i+1;
    			return;
    		}
    	}
    }

这是部门这个类中的代码,想问的是最后统计员工个数的方法里

yuangong.setBmName(this);

这一句报错,红线画在setBmName下面,想知道哪里出了问题,应该怎么改

正在回答

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

4回答

综合代码来看,应该将员工类中部门属性定义为对象类型,即private Bumen bumen,同时修改对应的getter和setter方法以及构造方法;这样在addNumber方法中就可以调用员工的所属部门属性的setter方法完成属性的赋值,即作业中报错的地方改为yuangong.setBumen(this);同时修改员工类的infor方法中对于部门的取值,改为getBumen().getBmName()。

同时,也建议将员工类中的职位属性定义为对象类型,即private Zhiwu zhiwu;同时修改对应的getter和setter方法以及构造方法。

测试类中,对象的初始化时也应该做调整,例如

Yuangong yuangong=new Yuangong("张铭","S001",29,"男",bumen,zhiwu3);

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

提问者 慕先生7975374 2017-08-16 12:20:24

我把我后面的代码发出来吧,麻烦老师看下问题在哪,顺便看看有什么改进的地方吧

package com.imooc.renyuan;

public class Zhiwu {
	//属性
      private int jobNumber;
      private String job;
      //构造方法
      public Zhiwu(int jobNumber,String job) {
    	  this.setJobNumber(jobNumber);
    	  this.setJob(job);
      }
      //构造set/get方法
      public void setJobNumber(int jobNumber) {
    	  this.jobNumber=jobNumber;
      }
      public int getJobNumber() {
    	  return jobNumber;
      }
      public void setJob(String job) {
    	  this.job=job;
      }
      public String getJob() {
    	  return job;
      }  
}
package com.imooc.renyuan;

public class Yuangong {
	//属性
      private String name;
      private String number;
      private int age;
      private String sex;
      private String bumen;
      private String job;
	//构造set/get方法
      public void setName(String name) {
    	  this.name=name;
      }
      public String getName() {
    	  return name;
      }
      public void setNumber(String number) {
    	  this.number=number;
      }
      public String getNumber() {
    	  return number;
      }
      //对年龄进行限制
      public void setAge(int age) {
    	  if(age>65||age<18) {
    		  age=18;
    	  }
    	  this.age=age;
      }
      public int getAge() {
    	  return age;
      }
      //对性别进行限制
      public void setSex(String sex) {
    	  if(sex.equals("女")) {
    		  sex="女";
    	  }
    	  else {
    		  sex="男";
    	  }
    	  this.sex=sex;
      }
      public String getSex() {
    	  return sex;
      }
      public void setBumen(String bumen) {
    	  this.bumen=bumen;
      }
      public String getBumen() {
    	  return bumen;
      }
      public void setJob(String job) {
    	  this.job=job;
      }
      public String getJob() {
    	  return job;
      }
      //创建构造方法
      public Yuangong(String name,String number,int age,String sex,String bumen,String job) {
    	  this.setName(name);
    	  this.setNumber(number);
    	  this.setAge(age);
    	  this.setSex(sex);
    	  this.setBumen(bumen);
    	  this.setJob(job);
      }
      //创建员工自我介绍信息的方法,将员工信息作为字符串返回
      public String infor() {
    	  String str="姓名:"+getName()+"\r\n工号:"+getNumber()+"\r\n年龄:"+getAge()+"\r\n性别:"+getSex()+"\r\n所属部门:"+getBumen()+"\r\n职务信息:"+getJob();
    	  return str;
      }

}
package com.imooc.ceshi;

import com.imooc.renyuan.Bumen;
import com.imooc.renyuan.Yuangong;
import com.imooc.renyuan.Zhiwu;

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
//创建对象
		Bumen bumen=new Bumen(1,"人事部");
		Bumen bumen1=new Bumen(2,"市场部");
		Zhiwu zhiwu=new Zhiwu(3,"职员");
		Zhiwu zhiwu2=new Zhiwu(4,"助理");
		Zhiwu zhiwu3=new Zhiwu(5,"经理");
	//输出员工信息
		Yuangong yuangong=new Yuangong("张铭","S001",29,"男","人事部","经理");
		Yuangong yuangong1=new Yuangong("李艾爱","S002",21,"女","人事部","助理");
		Yuangong yuangong2=new Yuangong("孙超","S003",29,"男","人事部","职员");
		Yuangong yuangong3=new Yuangong("张美美","S004",26,"女","市场部","职员");
		Yuangong yuangong4=new Yuangong("蓝迪","S005",37,"男","市场部","经理");
		Yuangong yuangong5=new Yuangong("米莉","S006",24,"女","市场部","职员");
		System.out.println(yuangong.infor());
		System.out.println("========================================");
		System.out.println(yuangong1.infor());
		System.out.println("========================================");
		System.out.println(yuangong2.infor());
		System.out.println("========================================");
		System.out.println(yuangong3.infor());
		System.out.println("========================================");
		System.out.println(yuangong4.infor());
		System.out.println("========================================");
		System.out.println(yuangong5.infor());
		System.out.println("========================================");
		//导入职员信息
		bumen.addNumber(yuangong);
		bumen.addNumber(yuangong1);
		bumen.addNumber(yuangong2);
		bumen1.addNumber(yuangong3);
		bumen1.addNumber(yuangong4);
		bumen1.addNumber(yuangong5);
		//测试各部门人数
		System.out.println(bumen.getBmName()+"总共有"+bumen.getCount()+"名员工");
		System.out.println(bumen1.getBmName()+"总共有"+bumen1.getCount()+"名员工");
		
	}

}


一叶知秋519 2017-08-16 11:14:57

你好,你可以看下yuangong.setBmName(this)的setBmName方法的参数是不是对象类型,如果不是对象类型也会报错。因为this指代的是当前对象。如果还有问题的话,可以再次提问。祝学习愉快~

  • 提问者 慕先生7975374 #1
    请问是需要将setBmName进行实例化对象吗
    2017-08-16 11:30:08
  • 提问者 慕先生7975374 #2
    不是太懂什么是对象类型啊
    2017-08-16 11:34:36
  • 一叶知秋519 回复 提问者 慕先生7975374 #3
    数据类型分为基本数据类型和引用数据类型,int n 就是定义基本数据类型的变量,Yuangong yuangong,yuangong就是Yuangong类的引用数据类型,也就是我们常说的对象类型。祝学习愉快~
    2017-08-16 14:10:07
慕设计8107682 2017-08-16 07:17:19

应该是空指针异常,我编的时候也是这样,结果是在定义属性的时候就直接初始化了,后来经过了解,要把get方法里判断空指针的if语句放到你for循环里面,把for循环里面的if换掉这样就可以了,我debug了下,发现程序根本就不会跑到get方法里面去判断,也不知道为什么,希望可以帮到你.......

  • 提问者 慕先生7975374 #1
    谢谢,虽然我还不是太懂
    2017-08-16 09:14:03
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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