简体   繁体   English

正确调用其他类中的方法| 爪哇

[英]Correctly calling a method in a different class | Java

I got a superclass Employee and subclasses of that (HourlyEmployee and CommissionEmployee) and a tester class. 我有一个超类的Employee和该类的子类(HourlyEmployee和CommissionEmployee)以及一个测试器类。

When I run the program and take in user values, after it asks for hours/sales and calculates pay - the value given is 0.0. 当我运行该程序并接受用户值时,它会询问小时数/销售额并计算工资-给定的值为0.0。 The pay is not being calculated correctly - or at all - why is this and how can I do it correctly? 薪水计算不正确-或根本没有计算-为什么这样做,我该如何正确计算?

abstract class Employee {

// Data members
private String firstName;
private String lastName;
private int employeeNumber;
private int numberOfEmployees;
protected int hours;
protected int sales;
protected double pay;

// Default constructor
public Employee() {
    firstName = null;
    lastName = null;
    employeeNumber = 0;
    numberOfEmployees = 0;
}

// Getter and setter methods
public String getFirstName() {
    return firstName;
}
public void setFirstName(String firstName) {
    this.firstName = firstName;
}

public String getLastName() {
    return lastName;
}
public void setLastName(String lastName) {
    this.lastName = lastName;
}

public int getEmployeeNumber() {
    return employeeNumber;
}
public void setEmployeeNumber(int employeeNumber) {
    this.employeeNumber = employeeNumber;
}

public int getNumberOfEmployees() {
    return numberOfEmployees;
}
public void setNumberOfEmployees(int numberOfEmployees) {
    this.numberOfEmployees = numberOfEmployees;
}

// Abstract method to be implemented in sublcasses
public abstract void earnings();

@Override
public String toString(){
    return "First Name: " + getFirstName() + "\n" + "Last Name: " + getLastName() + "\n" +
            "Employee Number: " + getEmployeeNumber() + "\n" + "Number of Employees: "
            + getNumberOfEmployees();
}

}

` `

public class HourlyEmployee extends Employee {

// Constructor
   public HourlyEmployee() {
        //Calls default constructor in superclass
        super();
   }

   // Establish the amount of pay for hourly employees
   int rate = 15;

   // Override earnings method
   @Override
   public void earnings(){
         pay = hours * rate;
   }

   // Return String representation of class
   public String toString(){
         return "First Name: " + getFirstName() + "Last Name: " + getLastName() +
        "Employee Number: " + getEmployeeNumber() + "Number of Employees: "
        + getNumberOfEmployees();
  }
  }

` `

public class CommissionEmployee extends Employee {

     // Constructor
     public CommissionEmployee() {
         //Calls default constructor in superclass
         super();
     }

     // Establish the amount of pay for hourly employees
     double commission = 0.10;

     // Override earnings method
     @Override
     public void earnings(){
         pay = commission * sales;
     }

     // Return String representation of class
     public String toString(){
     return "First Name: " + getFirstName() + "Last Name: " + getLastName() +
        "Employee Number: " + getEmployeeNumber() + "Number of Employees: "
        + getNumberOfEmployees();
     }
}

` `

import java.util.LinkedList;
import java.util.Scanner;

public class EmployeeTester {

    public static void main(String[] args) {

        // Protected double only visible in superclass and subclass.
        // Must be declared again in tester class.
        double pay;
        int hours;
        int sales;

        // Create new LinkedList
        LinkedList<Employee> employeeList = new LinkedList<>();

        // Create Scanner obkect
        Scanner keyboard = new Scanner(System.in);

        char yes = 'y';
        int x = 0;

        while(yes == 'y' || yes == 'Y'){

            // Declare & create a HourlyEmployee odject
            HourlyEmployee employee1 = new HourlyEmployee();
            employeeList.add(employee1);

            System.out.print("Enter First Name: ");
            String firstName = keyboard.next();
            employee1.setFirstName(firstName);
            employeeList.get(x).setFirstName(firstName);
            System.out.print("Enter Last Name: ");
            String lastName = keyboard.next();
            employee1.setLastName(lastName);
            employeeList.get(x).setLastName(lastName);
            System.out.print("Enter Employee Number: ");
            int employeeNumber = keyboard.nextInt();
            employee1.setEmployeeNumber(employeeNumber);
            employeeList.get(x).setEmployeeNumber(employeeNumber);
            System.out.print("Enter Number of Employees: ");
            int numberOfEmployees = keyboard.nextInt();
            employee1.setNumberOfEmployees(numberOfEmployees);
            employeeList.get(x).setNumberOfEmployees(numberOfEmployees);
            System.out.print("Enter Hours Worked: ");
            hours = keyboard.nextInt();


            // Calculate earnings
            employee1.earnings();

            System.out.println(employee1.toString());
            System.out.println("Total Earnings: " + employee1.pay);

            x++; // increment x

            System.out.print("Continue? [y/n] ");
            yes = keyboard.next().charAt(0);
        }

            // Declare & create a CommissionEmployee odject
            CommissionEmployee employee2 = new CommissionEmployee();
            employeeList.add(employee2);

            System.out.print("Enter First Name: ");
            String firstName = keyboard.next();
            employee2.setFirstName(firstName);
            employeeList.get(x).setFirstName(firstName);
            System.out.print("Enter Last Name: ");
            String lastName = keyboard.next();
            employee2.setLastName(lastName);
            employeeList.get(x).setLastName(lastName);
            System.out.print("Enter Employee Number: ");
            int employeeNumber = keyboard.nextInt();
            employee2.setEmployeeNumber(employeeNumber);
            employeeList.get(x).setEmployeeNumber(employeeNumber);
            System.out.print("Enter Number of Employees: ");
            int numberOfEmployees = keyboard.nextInt();
            employee2.setNumberOfEmployees(numberOfEmployees);
            employeeList.get(x).setNumberOfEmployees(numberOfEmployees);
            System.out.print("Enter Sales Made: ");
            sales = keyboard.nextInt();

            // Calculate earnings
            employee2.earnings();

            System.out.println(employee2.toString());
            System.out.println("Total Earnings: " + employee2.pay);

            x++; // increment x

            System.out.print("Continue? [y/n] ");
            yes = keyboard.next().charAt(0);

        }     
    }

You need to set hours and sales to the employee objects, currently, they are 0, because, as int, both sales and hours get initialized to 0, 您需要为员工对象设置小时数和销售额,目前它们是0,因为作为整数,销售和小时数都被初始化为0,

So, commission * sales will become 0 and hours * rate will become 0. 因此, commission * sales将变为0, hours * rate将变为0。

In EmployeeTester, set Hours to the HourlyEmployee object 在EmployeeTester中,将Hours设置为HourlyEmployee对象

System.out.print("Enter Hours Worked: ");
hours = keyboard.nextInt();
employee1.setHours(hours);

In EmployeeTester, set Sales to the CommissionEmployee object 在EmployeeTester中,将Sales设置为CommissionEmployee对象

System.out.print("Enter Sales Made: ");
sales = keyboard.nextInt();
employee2.setSales(sales);

You need to add setHours method in Employee 您需要在Employee中添加setHours方法

public void setHours(int hours) {
        this.hours = hours;
    }

call this method in EmployeeTester after getting hours from that. 从中获取小时后,在EmployeeTester中调用此方法。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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