I have added the code to the test program for pieceworker, and written the pieceworker program. Everything compiles with no errors, but when it runs It only displays the first two salariedemployee and hourlyemployee then finishes and I get this error message:
Exception in thread "main" java.util.IllegalFormatConversionException: f != java.lang.String
Here is the test code:
CODE
public class PayrollSystemTest
{
public static void main( String [] args )
{
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 );
PieceWorkerEmployee pieceWorkerEmployee =
new PieceWorkerEmployee( "Rick", "Bridges", "555-55-5555", 2.25, 400);
System.out.println( "Employee processed individually:\n" );
System.out.printf( "%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",
pieceWorkerEmployee, "earned", pieceWorkerEmployee.earnings() );
Employee employees[] = new Employee[ 5 ];
employees[ 0 ] = salariedEmployee;
employees[ 1 ] = hourlyEmployee;
employees[ 2 ] = commissionEmployee;
employees[ 3 ] = basePlusCommissionEmployee;
employees[ 4 ] = pieceWorkerEmployee;
System.out.println( "Employees processed polymorphically:\n" );
for ( Employee currentEmployee : employees )
{
System.out.println( currentEmployee );
if ( currentEmployee instanceof BasePlusCommissionEmployee )
{
BasePlusCommissionEmployee employee =
( BasePlusCommissionEmployee ) currentEmployee;
double oldBaseSalary = employee.getBaseSalary();
employee.setBaseSalary( 1.10 * oldBaseSalary );
System.out.printf(
"new base salary with 10%% increase is: $%,.2f\n",
employee.getBaseSalary() );
}
System.out.printf(
"earned $%,.2f\n\n", currentEmployee.earnings() );
}
for (int j = 0; j < employees.length; j++ )
System.out.printf( "Employee %d is a %s\n", j,
employees[ j ].getClass().getName() );
}
}
now here is the pieceworker code:
CODE
public class PieceWorkerEmployee extends Employee
{
private double wage;
private int pieces;
public PieceWorkerEmployee( String first, String last, String ssn,
double pieceWage, int piecesWorked )
{
super( first, last, ssn );
setWage( pieceWage );
setPieces( piecesWorked );
}
public void setWage( double pieceWage )
{
wage = ( pieceWage >= 0.0 ) ? 0.0 :pieceWage;
}
public double getWage()
{
return wage;
}
public void setPieces( int piecesWorked )
{
pieces = ( piecesWorked >= 0 ) ? 0 : piecesWorked;
}
public int getPieces()
{
return pieces;
}
public double earnings()
{
return getPieces() * getWage();
}
public String toString()
{
return String.format( "%s: s\n%s: $%,.2f; %s: %.2f",
"piece employee", super.toString(),
"pieces worked", getPieces(),
"piece wage", getWage() );
}
}
This post has been edited by alcdotcom: 2 Jul, 2007 - 01:46 PM