繁体   English   中英

从其他类调用方法时,Output 未按预期出现

[英]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;
    }
}

主class

移除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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM