java - 从其他类调用方法时输出未按预期输出
问题描述
我正在尝试创建如下所示的输出:
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
班级内部以某种方式连接到您在Main
班级中声明的那个。
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());
在这段代码中,您实际上得到了 2 个Employee
. 一个em
在 Main 内部调用和“存储”,另一个在ProductionWorker
实例内部pw
调用employee
. 这些是 2 个独立且断开连接的实例。
如果你能解决这个问题,那么你会没事的。例如,添加一个 getter() 方法来Employee
获取ProductionWorker
.
更新代码
类Employee
没有变化。
生产工人
添加一个 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
并调用 getterProductionWorker
代替。
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());
}
}
推荐阅读
- django - 产品匹配查询不存在 Django
- javascript - 根据用户单选输入有条件地显示表单字段
- reactjs - 即使问题已在 React 应用程序中修复,TypeScript 也不会更改错误(终端输出)
- python - 正则表达式 python \1 \2 将字符串添加到结果文本的可能性
- node.js - 为什么在 res.redirect 之前使用 res.location?
- c++ - 列出与擦除不兼容的迭代器
- image - FPDF 在 fancytable 中包含图像
- python - 如何检查sqlite 3 python中的列中是否存在值
- raspberry-pi - 在 Raspberry Pi 上从 mubi.com 读取视频失败并出现 videojs 错误
- python - 使用数据透视表重新采样和重新组合