stsutsui
stsutsui

Reputation: 21

Java Methods and Calling Method Too Many Times

I'm having trouble with Java methods. This code is supposed to have three methods. Method 1) Enter # of employees. Method 2) Enter # of days absent for each employee. Method 3) Calculate average # of days absent. Then, in Main, the # of employees, # of days absent, and the average # of days absent should print. Clearly, I don't understand how methods work because when I run the code, the user is asked 4x the number of employees and 2x the number of days missed by employees before it provides the # of employees, # days absent and average # of days absent. How do I change the code so the user only needs to enter the information once?

public static void main(String[] args) {
    /** Asks for the # of employees and their days absent using
     3 methods. 1) Requests number of employees, 2) # of days absent, 3)
     Average # of days absent)*/

    int numEmployeeM, numDaysMissedM;
    double averageNumDaysAbsentM;

    numEmployeeM = numEmployee();
    numDaysMissedM = numDaysMissed(numEmployeeM);
    averageNumDaysAbsentM = averageNumDaysAbsent(numEmployeeM,
            numDaysMissedM);
    System.out.println("\n\tTotal number of employees: " + numEmployeeM +
            "\n\tTotal number of days missed: " + numDaysMissedM +
            "\n\tAverage number of days absent: " + averageNumDaysAbsentM);
}

public static int numEmployee() {
    Scanner keyboard = new Scanner(System.in);

    int numEmployee;

    System.out.print("Number of employees in company:");
    numEmployee = keyboard.nextInt();
    return numEmployee;
}

public static int numDaysMissed(int numEmployee1) {
    Scanner keyboard = new Scanner(System.in);

    int count, numDaysMissed, totalNumDaysMissed;
    count = 1;
    totalNumDaysMissed = 0;
    numEmployee1 = numEmployee();

    while (count <= numEmployee1) {
        System.out.print("Enter number of days missed by Employee #"
                + count + ": ");
        numDaysMissed = keyboard.nextInt();
        totalNumDaysMissed += numDaysMissed;
        count++;
    }
    return totalNumDaysMissed;
}

public static double averageNumDaysAbsent(int numEmployee2,
                                          int totalNumDaysMissed1) {
    double averageDaysMissed;
    numEmployee2 = numEmployee();
    totalNumDaysMissed1 = numDaysMissed(numEmployee2);

    averageDaysMissed = (totalNumDaysMissed1 / numEmployee2);
    return averageDaysMissed;
}

Upvotes: 2

Views: 518

Answers (1)

phflack
phflack

Reputation: 2727

Simplifying the code to see what's calling what:

void main(String[] args)
{
    numEmployeeM = numEmployee();
    numDaysMissedM = numDaysMissed(numEmployeeM);
    averageNumDaysAbsentM = averageNumDaysAbsent(numEmployeeM, numDaysMissedM);
}

int numEmployee()
{
}

int numDaysMissed(int numEmployee1)
{
    numEmployee1 = numEmployee();
}

double averageNumDaysAbsent(int numEmployee2, int totalNumDaysMissed1)
{
    numEmployee2 = numEmployee();
    totalNumDaysMissed1 = numDaysMissed(numEmployee2);
}

So when your code executes, it calls

  • main
    • numEmployee
    • numDaysMissed
      • numEmployee
    • averageNumDaysAbsent
      • numEmployee
      • numDaysMissed
        • numEmployee

This gives the expected total counts of 1x averageNumDaysAbsent, 2x numDaysMissed, and 4x numEmployee

In numDaysMissed and averageNumDaysAbsent you're overwriting your input arguments and making them useless

Try removing those lines and it should work as expected

Upvotes: 1

Related Questions