gpt4 book ai didi

java - 从其他类调用方法时,输出未按预期输出

转载 作者:行者123 更新时间:2023-12-01 16:43:06 24 4
gpt4 key购买 nike

我正在尝试创建如下所示的输出:

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 方法和员工 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。这是两个独立且断开连接的实例。

如果你解决了这个问题,那就没问题了。例如,添加 getter() 方法来获取 ProductionWorker 内的 Employee 实例。

更新代码

Employee 类不会改变。

生产 worker

添加 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());
}
}

关于java - 从其他类调用方法时,输出未按预期输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58941062/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com