Java方法和调用方法太多次

标签 java methods parameter-passing

我在使用 Java 方法时遇到问题。这段代码应该有三种方法。方法 1) 输入员 worker 数。方法 2) 输入每位员工的缺勤天数。方法 3) 计算平均缺勤天数。然后,在 Main 中,应打印雇员数、缺勤天数和平均缺勤天数。显然,我不明白这些方法是如何工作的,因为当我运行代码时,系统会询问用户 4 倍的员 worker 数和 2 倍的员工缺勤天数,然后才会提供员工数量、缺勤天数和平均缺勤天数。缺席的日子。如何更改代码以便用户只需输入一次信息?

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;
}

最佳答案

简化代码以查看什么在调用什么:

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);
}

所以当你的代码执行时,它会调用

  • 主要
    • 员 worker 数
    • numDaysMissed
      • 员 worker 数
    • 平均缺勤天数
      • 员 worker 数
      • numDaysMissed
        • 员 worker 数

这给出了 1x averageNumDaysAbsent、2x numDaysMissed 和 4x numEmployee

的预期总计数

numDaysMissedaverageNumDaysAbsent 中,您将覆盖输入参数并使它们无用

尝试删除这些行,它应该会按预期工作

关于Java方法和调用方法太多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47357633/

相关文章:

java - 当我有并非所有实现者都支持的操作时,设计界面的正确方法是什么?

java - 如何创建一个可以将多个类作为输入的方法

Java/Android - 将对象传递给打开资源的方法

java - 我怎样才能在linux中制作jar?

java - 在文件夹之间移动创建的文件会产生奇怪的 "Shared With Me"行为

java - 在java中将二维数组的列复制为一维数组?

php - 如何检查PHP中的方法是否是静态的?

C# 自定义属性参数

ios - 设置另一个 UIViewController 的属性

java - jackson 序列化 : how to ignore superclass properties