[英]Output not coming out as expected when calling methods from other classes
我正在尝试创建如下所示的 output:
Here's the first production worker.
Name: John Smith
Employee Number: 123-A
Hire Date: 11-15-2005
Shift: Day
Hourly Pay Rate: $23.50
但是我的代码导致:
Here's the first production worker.
Name:
Employee Number: INVALID EMPLOYEE NUMBER
Hire Date:
Shift: Day
Hourly Pay Rate: $23.5
这是我使用过的方法和代码
class Main {
public static void main(String[] args)
{
Employee em = new Employee();
ProductionWorker pw= new ProductionWorker();
// First Worker (Testing setting all methods and to string methods)
System.out.print("Here's the first production worker.");
pw.setAll("John Smith", "123-A","11-15-2005",1,23.50);
System.out.print(em.toString());
System.out.println(pw.toString());
public class Employee{
private String emName="";
private String emID="";
private String emDate="";
private boolean isIDValid(String ID)
{
boolean status = true;
if (ID.length() != 5)
{
status = false;
emID="";
}
else
{
if ((!Character.isDigit(ID.charAt(0))) ||
(!Character.isDigit(ID.charAt(1))) ||
(!Character.isDigit(ID.charAt(2))) ||
(ID.charAt(3) != '-') ||
(!Character.isLetter(ID.charAt(4))))
{
status = false;
emID="";
}
}
return status;
}
public void setName(String name)
{
emName=name;
}
public void setID(String ID)
{
emID=ID;
}
public void setDate(String date)
{
emDate=date;
}
public String toString()
{
System.out.println(emName);
if (isIDValid(emID))
{
return "Name: " + emName + "\nEmployee Number: " + emID + "\nHire Date: " + emDate;
}
else
{
return "Name: " + emName + "\nEmployee Number: " + "INVALID EMPLOYEE NUMBER" + "\nHire Date: " + emDate;
}
}
public class ProductionWorker extends Employee{
private int emShift;
private double emPay;
Employee employee = new Employee();
public void setAll(String name,String ID,String date,int shift, double pay)
{
employee.setName(name);
employee.setID(ID);
employee.setDate(date);
emShift=shift;
emPay=pay;
}
public String toString()
{
if ((emShift != 1) && (emShift != 2))
{
return "Shift: INVALID SHIFT NUMBER" + "\nHourly Pay Rate: $" + emPay;
}
if (emShift==1)
{
return "\nShift: Day" + "\nHourly Pay Rate: $" + emPay;
}
else
{
return "\nShift: Night" + "\nHourly Pay Rate: $" + emPay;
}
}
似乎 emName emDate 和 emID 变量没有转换到 em.toString 方法中。 但是,我已经通过在 setter 方法中测试并将它们打印到控制台来测试是否正在设置变量。 在员工 setter 方法和员工 toString 方法之间的某个地方,程序会丢失变量的值。 请帮忙。
你的代码是错误的。 您正在假设变量
Employee employee = new Employee();
在您的ProductionWorker
class 内部以某种方式连接到您在Main
class 中声明的那个。
Employee em = new Employee();
ProductionWorker pw= new ProductionWorker();
pw.setAll("John Smith", "123-A","11-15-2005",1,23.50);
System.out.print(em.toString());
System.out.println(pw.toString());
在这段代码中,您实际上得到了Employee
的 2 个实例。 一个称为em
并“存储”在 Main 内部,另一个位于ProductionWorker
实例pw
内部,称为employee
。 这些是 2 个独立且断开连接的实例。
如果你能解决这个问题,那么你会没事的。 例如,添加一个 getter() 方法来获取ProductionWorker
内部的Employee
实例。
Employee
class 没有改变。
添加一个 getter ( getEmployee()
) 方法。
package eu.webfarmr.employee;
public class ProductionWorker extends Employee {
private int emShift;
private double emPay;
Employee employee = new Employee();
public void setAll(String name, String ID, String date, int shift, double pay) {
this.employee.setName(name);
this.employee.setID(ID);
this.employee.setDate(date);
this.emShift = shift;
this.emPay = pay;
}
public String toString() {
if ((this.emShift != 1) && (this.emShift != 2)) {
return "Shift: INVALID SHIFT NUMBER" + "\nHourly Pay Rate: $" + this.emPay;
}
if (this.emShift == 1) {
return "\nShift: Day" + "\nHourly Pay Rate: $" + this.emPay;
} else {
return "\nShift: Night" + "\nHourly Pay Rate: $" + this.emPay;
}
}
public Employee getEmployee() {
return this.employee;
}
}
移除Employee
的本地实例化并调用ProductionWorker
上的 getter。
package eu.webfarmr.employee;
public class Main {
public static void main(String[] args) {
ProductionWorker pw = new ProductionWorker();
// First Worker (Testing setting all methods and to string methods)
System.out.print("Here's the first production worker.");
pw.setAll("John Smith", "123-A", "11-15-2005", 1, 23.50);
System.out.print(pw.getEmployee().toString());
System.out.println(pw.toString());
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.