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