【问题标题】:Java Methods and Calling Method Too Many TimesJava方法和调用方法太多次
【发布时间】:2018-05-01 15:25:36
【问题描述】:

我在使用 Java 方法时遇到问题。这段代码应该有三种方法。方法 1) 输入员工人数。方法 2) 输入每位员工的缺勤天数。方法 3) 计算平均缺勤天数。然后,在 Main 中,应打印员工人数、缺勤天数和平均缺勤天数。显然,我不明白方法是如何工作的,因为当我运行代码时,在提供员工数、缺勤天数和平均缺勤天数之前,用户会被询问 4 倍的员工人数和 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;
}

【问题讨论】:

  • 我不太明白您想做什么...您只想显示所有员工的总缺勤天数的统计信息,或者您想对所有员工及其天数进行登记工作/错过?
  • 我只想显示所有员工的总缺勤天数、员工人数以及所有员工的平均缺勤天数。
  • @user3120754 我想从主要方法中显示所有员工的总缺勤天数、员工人数和所有员工的平均缺勤天数。
  • 另外,请注意,您也可以在 glocal 中定义一次 Scanner keyboard = new Scanner(System.in);,而不是在每个请求用户输入的方法中重新定义类。

标签: java methods parameter-passing


【解决方案1】:

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

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

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

  • 主要
    • 员工人数
    • numDaysMissed
      • 员工人数
    • 平均NumDaysAbsent
      • 员工人数
      • numDaysMissed
        • 员工人数

这给出了 1x averageNumDaysAbsent、2x numDaysMissed 和 4x numEmployee 的预期总计数

numDaysMissedaverageNumDaysAbsent 中,您正在覆盖您的输入参数并使其无用

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

【讨论】:

  • 谢谢。您的解释使我更容易理解我正在覆盖我的输入参数;因此,使它们无用。谢谢!!
  • 谢谢,phflack!我现在明白我正在覆盖我的输入参数。
  • 我有一个更一般的问题。在我们上面的例子中,Java 是如何知道当它到达方法 double averageNumDaysAbsent 时,2 个参数变量 numEmploye2 和 totalNumDaysMissed1 分别代表方法 int numEmployee() 和 int numDaysMissed(int numEmployee1) 的值。
  • main 方法调用averageNumDaysAbsent(numEmployeeM, numDaysMissedM); 时,它会提供两个输入参数。您可以使用averageNumDaysAbsent(2, 5);,这将是有效代码,但可能没有用(并将numEmployee2 设置为2,totalNumDaysMissed1 设置为5)。我找不到能很好解释它的链接,但如果您将其作为问题发布,我很乐意回答(很难作为评论回答)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多