为什么我得到null作为输出字符串而不是我想要的?

时间:2018-04-29 04:36:12

标签: java

我被要求用TestStaff计算一个接受名字的Java程序, 员工身份和每天工作作为用户的输入,并显示员工的姓名,员工ID和工资。但是在输出结束时,我得到null null 0.0。我是这个对象和课程部分的初学者,我真的迷路了。有人可以帮忙吗?这是我的代码:

这是给定的代码:

!

以下是TestStaff的代码:

    class Staff {

       private String name, staffID;

       private double salary;

       private int workingDay;

       public void setStaffInfo(String nm, String id, int wDay){

          name=nm;
          staffID=id;
          workingDay=wDay;
    }

    public void calculateSalary(){

       salary = workingDay * 35.0;

       }
    public double getSalary(){

       return salary;

       }

    public String getName(){

       return name;

       }
    public String getStaffID(){

       return staffID;
       }

    }

    import java.util.Scanner;

5 个答案:

答案 0 :(得分:2)

您需要使用Staffset方法初始化其成员。

即:staff1.setStaffInfo(nm, id, wDay);

您所做的只是创建3个新变量并为其分配值,但您的Staff个对象'成员没有设定。
您也可以在calculateSalary()之前致电getSalary(),因为前者会初始化salary变量。

答案 1 :(得分:2)

您缺少调用方法staff1.setStaffInfo(nm, id, wDay);

我建议使用类Staff的所有实例变量的参数化构造函数,使用该构造函数为Staff创建实例。这样你就不会得到空值。 建议: 在Staff类中创建构造函数:

Staff(){}

Staff(String name, String staffID, double salary ,  int workingDay){
    this.name = name;
    this.staffID=staffID;
    this.salary=salary;
    this.workingDay = workingDay;
}

在TestStaff类中,您可以添加以下行:

Staff staff2 = new Staff(nm,id, 2400, wDay);

    System.out.println(staff2.getName() + "\t" + staff2.getStaffID() + "\t\t" + staff2.getSalary());

答案 2 :(得分:1)

  

但是在输出结束时,我得到null,null,0.0。

您没有在代码中的任何位置向setStaffInfo(String nm, String id, int wDay)传递任何参数,因此它显示为null,null,0.0

<强>解决方案

将以下变量传递给类setStaffInfo(String nm, String id, int wDay)

Staff方法

String nm=console.nextLine(); String id=console.nextLine(); int wDay=console.nextInt();

喜欢这样:

staff1. setStaffInfo(nm,id,wDay)

和建议

在getSalary()方法中运行calculateSalary(),如下所示:

public double getSalary(){
    calculateSalary(); //this will autimatically calculate salary
   return salary;

   }

然后,您只需在主要方法中调用getSalary(),它就会自动调用calculateSalary(),或者您也可以将calculateSalary()中的那一行放入getSalary()

答案 3 :(得分:1)

在main方法中,您创建了Staff对象并将所有输入存储在某个变量中,但未在object中设置输入。这就是为什么当你打印staff1.getSalary()时它会返回默认值double,即0.0。首先设置值staff1.setInfo(...)然后打印值。

答案 4 :(得分:0)

您可以从班级员工创建一个新对象,但您必须将数据成员分配给班级,并且可以通过两种不同的方式完成:

  

1-您的方法staff1.setStaffInfo(nm,id,wDay);

staff1.setStaffInfo(nm, id, wDay);
  

2-构造函数

 Staff staff1= new Staff(id, nm, wDay);

在Staff类中添加下面的构造函数,这个构造函数将使您能够创建一个指定id,nm和wDay的新对象

Staff  (String staffID ,String name , int workingDay) {
this.staffID = staffID;
this.name = name ;
this.workingDay = workingDay ;
}