Reputation: 21
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
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
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