3-8作业问题

3-8作业问题

package com.Imooc;


public class Department {
  private int departmentid;
  private String departmentname;
  private Staff[] myStaff;
  private int staffNum;
public Department(){
	
}
public Department(int departmentid,String departmentname){
	this.departmentid =departmentid;
	this.departmentname =departmentname;
	
}
public int getDepartmentid() {
	return departmentid;
}
public String getDepartmentname() {
	return departmentname;
}
public void setDepartmentid(int departmentid) {
	this.departmentid = departmentid;
}
public void setDepartmentname(String departmentname) {
	this.departmentname = departmentname;
}
public Staff[] getMyStaff() {
	if(this.myStaff==null)
		this.myStaff =new Staff[20];
	return myStaff;
}
public int getStaffNum() {
	return staffNum;
}
public void setMyStaff(Staff[] myStaff) {
	
	this.myStaff = myStaff;
}
public void setPostNu(int staffNum) {
	this.staffNum = staffNum;
}
public void  addStaff(Staff sta){
	for(int i=0;i<this.getMyStaff().length;i++){
		if(this.getMyStaff()[i]==null){
			this.getMyStaff()[i]=sta;
			this.staffNum=i+1;
			return;
		}
	}
}  
}
package com.Imooc;

public class Staff {
//成员属性:员工姓名,工号,年龄,性别,所属部门,职务信息
private String staffname;
private String staffid;
private int staffage;
private String staffsex;
private Department staffdepartment;
private Post staffpost;

//无参构造方法
public Staff(){
	
}
//带参构造方法,实现对属性的全部赋值
public Staff(String staffname,String staffid,int staffage,String staffsex){
	this.staffname=staffname;
	this.staffid =staffid;
	this.setStaffage(staffage);
	this.setStaffsex(staffsex);
	
}
public String getStaffname() {
	return staffname;
}
public String getStaffid() {
	return staffid;
}
public int getStaffage() {
	
	return staffage;
}
public String getStaffsex() {
	return staffsex;
}
public Department getStaffdepartment() {
	return staffdepartment;
}
public Post getStaffpost() {
	return staffpost;
}
public void setStaffname(String staffname) {
	this.staffname = staffname;
}
public void setStaffid(String staffid) {
	this.staffid = staffid;
}
//设置年龄限制,必须在18-65之间,否则强制默认为18
public void setStaffage(int staffage) {
	if(staffage>=18&&staffage<=65){
		this.staffage = staffage;
	}
	else{
		this.staffage=18;
	}
	
}
//设定性别只能是“男”或“女”,反之则设置默认为“男”
public void setStaffsex(String staffsex) {
	if(staffsex.equals("女")){
	this.staffsex = staffsex;
	}
	else{
		this.staffsex = "男";
	}
}
public void setStaffdepartment(Department staffdepartment) {
	this.staffdepartment = staffdepartment;
}
public void setStaffpost(Post staffpost) {
	this.staffpost = staffpost;
}
public String info(Department staffdepartment, Post staffpost){
	String str="姓名:"+this.getStaffname()+"\n工号"+this.getStaffid()+"\n年龄"+this.getStaffage()+"\n性别"+this.getStaffsex()+"\n职务:"+this.getStaffdepartment().getDepartmentname()+this.getStaffpost().getPostname();
	return str;
	
}
}
package com.Imooc;

public class Post {
private int postid;
private String postname;
public Post(){
	
}
public Post(int postid,String postname){
this.postid=postid;
this.postname=postname;
}
public int getPostid() {
	return postid;
}
public String getPostname() {
	return postname;
}
public void setPostid(int postid) {
	this.postid = postid;
}
public void setPostname(String postname) {
	this.postname = postname;
}


}
package com.Imooc;

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
Department dep1=new Department(1,"人事部");
Department dep2=new Department(2,"市场部");
Post po1=new Post(1,"经理");
Post po2=new Post(2,"助理");
Post po3=new Post(3,"职员");
Staff sta1=new Staff("张铭","S001",29,"男");
Staff sta2=new Staff("李艾爱","S002",21,"女");
Staff sta3=new Staff("孙超","S004",29,"男");
Staff sta4=new Staff("张美美","S005",26,"女");
Staff sta5=new Staff("蓝迪","S006",37,"男");
Staff sta6=new Staff("米莉","S007",24,"女");
dep1.addStaff(sta1);
dep1.addStaff(sta2);
dep1.addStaff(sta3);
dep2.addStaff(sta4);
dep2.addStaff(sta5);
dep2.addStaff(sta6);
System.out.println(sta1.info(dep1,po1));
System.out.println("=================================");
System.out.println(sta1.info(dep1,po2));
System.out.println("=================================");
System.out.println(sta1.info(dep1,po3));
System.out.println("=================================");
System.out.println(sta1.info(dep2,po3));
System.out.println("=================================");
System.out.println(sta1.info(dep2,po1));
System.out.println("=================================");
System.out.println(sta1.info(dep2,po3));
System.out.println("=================================");
System.out.println("人事部总共有"+dep1.getStaffNum()+"名员工");
System.out.println("市场部总共有"+dep2.getStaffNum()+"名员工");
	}

}
Exception in thread "main" java.lang.NullPointerException
	at com.Imooc.Staff.info(Staff.java:75)
	at com.Imooc.Test.main(Test.java:24)

为什么会出现空指针错误,哪里出错了?该改成什么样?

正在回答

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

2回答

因为你Staff类的初始化并没有给对应的Department和Post赋值,而info()方法中你传递了部门和职务对象,但是获取值的时候部门和职务是通过Staff员工类中的部门和职务熟悉的get方法获取的,但是并没有set,所以无法获取这两个属性的值。两种修改方法都可以:

1、在Staff类中的info()方法中,直接通过staffdepartment和staffpost两个参数对象调用对应的get方法获取名称即可。

2、在Staff类中将构造方法的参数在加入部门和职务对象参数,然后在Test类中初始化员工对象的时候,可以将对应的部门和职务对象传递进去即可。

上述方式可以选择一种进行修改。


  • 吾輩猫 提问者 #1
    能不能给出两个方法的详细代码,我改了半天还是不对
    2017-08-09 15:20:25
  • 吾輩猫 提问者 #2
    主要是想用方法1
    2017-08-09 15:20:54
  • 吾輩猫 提问者 #3
    我改好了,非常感谢!
    2017-08-09 15:29:31
提问者 吾輩猫 2017-08-09 11:28:40

空指针问题已解决,但是现在问题是职务为NULLNULL

  • 你可以参考我刚刚给你回复的方法进行修改,两个问题就都可以解决了。
    2017-08-09 11:38:02
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星

相似问题

登录后可查看更多问答,登录/注册

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

在线咨询

领取优惠

免费试听

领取大纲

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