1
votes

I have a a textbook question that I have attempted many times and still does not work here are the instructions:"

Write a Payroll class that uses the following arrays as fields:

  • employeeId. An array of seven integers to hold employee identification numbers. The array should be initialized with the following numbers:
    5658845 4520125 7895122 8777541 8451277 1302850 7580489
  • hours . An array of seven integers to hold the number of hours worked by each employee
  • payRate . An array of seven double s to hold each employee’s hourly pay rate
  • wages . An array of seven double s to hold each employee’s gross wages

    The class should relate the data in each array through the subscripts. For example, the number in element 0 of the hours array should be the number of hours worked by the employee whose identification number is stored in element 0 of the employeeId array. That same employee’s pay rate should be stored in element 0 of the payRate array.

In addition to the appropriate accessor and mutator methods, the class should have a method that accepts an employee’s identification number as an argument and returns the gross pay for that employee.

Demonstrate the class in a complete program that displays each employee number and asks the user to enter that employee’s hours and pay rate. It should then display each employee’s identification number and gross wages.

Input Validation: Do not accept negative values for hours or numbers less than 6.00 for pay rate."

so far I have my main class:

public class Payroll {
public static void main(String[] args){
    Pay work = new Pay();
    Scanner input = new Scanner(System.in);
    int[] hours = new hours[work.getLength()];

    for (int i=0; i<work.getLength(); ++i) {
        System.out.println("How many hours has Employee #"+work.getEmployeeId(i)+" worked?");
        input.nextInt() = hours[i];
        while (hours[i]<6){
            System.out.println("Error, inadequit value!");
            System.out.println("How many hours has Employee #"+work.getEmployeeId(i)+" worked?");
            input.nextInt() = hours[i];
        }

    }

}

I also have a class named Pay:

public class Pay {
private int[] employeeId;
//private int[] hours = new hours[employeeId.length];
//private int[] pay = new pay[employeeId.length];
//private int[] wage = new wage[employeeId.length];

public Pay() {
    employeeId = new int[]{5658845, 4520125, 7895122, 8777541, 8451277, 1302850, 7580489};
}
public int getLength(){
    return employeeId.length;
}

public int[] getEmployeeId(int id) {
    return employeeId[id];
}

I'm just not sur where to go next after all of this. Please help.

2

2 Answers

0
votes

I am going to answer this for the simplest way instead of the proper way, since I'm assuming you are somewhat new to programming. This is based on the fact that there seems to be no emphasis on class or any real modularization.

You just want to have 4 arrays of size 7.

The employee ids array will be set by you.

As you prompt the user for the information you save it in the correct array based on the index of the employee being set.

The method for gross pay would just take the id number of the employee, find their index number in the arrays and get the information necessary to calculate and return the gross pay. (presumably gross pay is wageRate * hoursWorked)

This is the simplest way of doing it, separate classes aren't necessary.

0
votes

A better way of doing this, on object-oriented principles, will be to avoid using multiple arrays. Instead create a class that holds all the employee attributes together, as an object.

public class Employee {
     private int id;
     private int hours;
     private double rate;

     // constructors

     // it should not have arguments such as id, hours or rate
     // because it is a method of this class and those attributes are 
     // implicitly assumed.
     public double getWage() {
        return hours * rate;
     }

     // toString method

     @Override
     public String toString() {
        return "Employee ID = " + id + "," + "hours = " .....
     }
}

Wage can be pre-calculated and stored as another field at the time of construction. Or calculated at the time of request as is done above.

The Payroll class:

public class Payroll {

      private Employee[] employees;
      private int lastIndex = 0;

      // constructors
      // for example, one constructor can accept initial size
      public Payroll(int size) {
         employees = new Employee[7];
      };

      public addEmployee(Employee employee) {

           // need to check overflow before attempting to add

           // add employee
           employees [lastIndex ] = emplyee;
           lastIndex++;
      }

      // more methods, such remove etc


}

Now the driver, or application class

public class Driver {


 public static void main(String[] args){
    Payroll payroll = new Payroll (7);

    // code to pupulate the Payroll with values

    for ( ) {
          // construct new Emplyee object
          // add object to Payroll

    }

    // Printing 
    for (Emplyee e: Payroll) {
        System.out.println(e.toString());
    }


}

}

Note that the application or driver class is separated from the Payroll, now each class does one thing, and only that thing. Remember that it is not the concern of Payroll class to populate itself or print its content etc.