简体   繁体   中英

Why does pieces produced display as a double rather than an integer?

I am just starting an advanced java course and I have a question for all those out here. How would I make it so that PayrollSystemTest displays the pieces produced from PieceWorker as an integer, rather than a double? I've tried changing getPieces to int, but that produced a conversion exception. Any information on this would be greatly appreciated. Thank you for your time.

PieceWorker.java:

 public class PieceWorker extends Employee 
{
  private double wage; // wage per piece
  private int pieces;  // pieces produced

  // constructor

public PieceWorker(String firstName, String lastName, String socialSecurityNumber, double wage, int pieces) 
{
    super(firstName, lastName, socialSecurityNumber);

    if (wage < 0.0) //validate wage
        throw new IllegalArgumentException("Wage must be >= 0.0");

    if ((pieces < 0))
        throw new IllegalArgumentException("Pieces produced must be >=0");

    this.wage = wage;
    this.pieces = pieces;
}

//set wage
    public void setWage(double wage)
    {
    if(wage < 0.0) // validate wage
        throw new IllegalArgumentException ("Wage must be >= 0.0");

    this.wage = wage;
    }

    //return wage
    public double getWage()
    {
        return wage;
    }

    //set hours worked
    public void setPieces(int pieces)
    {
        if ((pieces < 0))
            throw new IllegalArgumentException("Pieces produced must be >=0");


        this.pieces = pieces;
    }

    //return pieces produced
    public double getPieces()
    {
        return pieces;
    }

@Override
public double earnings() {
    return getPieces() * getWage();
}

@Override
public String toString()
{
    return String.format("piece worker: %s%n%s: $%,.2f, %s: %,.2f", super.toString(), "wage", getWage(), "pieces produced", getPieces());
}
}

PayrollSystemTest.java

// Fig 10.9: PayrollSystemTest.java
// Employee hierarchy test program.

public class PayrollSystemTest 
{
public static void main(String[] args)
{
    // create subclass objects
    SalariedEmployee salariedEmployee = new SalariedEmployee("John", "Smith", "111-11-1111", 800.00);
    HourlyEmployee hourlyEmployee = new HourlyEmployee("Karen", "Price", "222-22-2222", 16.75, 40);
    CommissionEmployee commissionEmployee = new CommissionEmployee("Sue", "Jones", "333-33-3333", 10000, .06);
    BasePlusCommissionEmployee basePlusCommissionEmployee = new BasePlusCommissionEmployee("Bob", "Lewis", "444-44-4444", 5000, .04, 300);
    PieceWorker pieceWorker = new PieceWorker("Tom", "Jacobson", "555-55-5555", 32.50, 80);

    System.out.println("Employees processed individually:");

    System.out.printf("%n%s%n%s: $%,.2f%n%n", salariedEmployee, "earned", salariedEmployee.earnings());
    System.out.printf("%s%n%s: $%,.2f%n%n", hourlyEmployee, "earned", hourlyEmployee.earnings());
    System.out.printf("%s%n%s: $%,.2f%n%n", commissionEmployee, "earned", commissionEmployee.earnings());
    System.out.printf("%s%n%s: $%,.2f%n%n", basePlusCommissionEmployee, "earned", basePlusCommissionEmployee.earnings());
    System.out.printf("%s%n%s: $%,.2f%n%n", pieceWorker, "earned", pieceWorker.earnings());

    //create four-element Employee array
    Employee[] employees = new Employee[5];

    //initialize array with Employees
    employees[0] = salariedEmployee;
    employees[1] = hourlyEmployee;
    employees[2] = commissionEmployee;
    employees[3] = basePlusCommissionEmployee;
    employees[4] = pieceWorker;

    System.out.printf("Employees processed polymorphically:%n%n");

    //generically process each element in array employees
    for (Employee currentEmployee : employees)
    {
        System.out.println(currentEmployee); // invokes toString

        //determines whether element is a BasePlusCommissionEmployee
        if (currentEmployee instanceof BasePlusCommissionEmployee)
        {
            //downcast Employee reference to
            //BasePlusCommissionEmployee reference
            BasePlusCommissionEmployee employee = (BasePlusCommissionEmployee) currentEmployee;

            employee.setBaseSalary(1.10 * employee.getBaseSalary());

            System.out.printf("new base salary with 10%% increase is: $%,.2f%n", employee.getBaseSalary());
        }// end if
    } //end for

    // get type name of each object in employees array
    for (int j = 0; j < employees.length; j++)
        System.out.printf("Employee %d is a %s%n", j, employees[j].getClass().getName());
}// end main
}// end class PayrollSystemTest

You have to adjust the toString() method too.
Change

public String toString()
{
    return String.format("piece worker: %s%n%s: $%,.2f, %s: %,.2f", super.toString(), "wage", getWage(), "pieces produced", getPieces());
}

to

public String toString()
{
    return String.format("piece worker: %s%n%s: $%,.2f, %s: %d", super.toString(), "wage", getWage(), "pieces produced", getPieces());
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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