【问题标题】:How do I make a loop inside a method in one class to call on another method in another class n Java?如何在一个类中的方法内创建循环以调用另一个类 n Java 中的另一个方法?
【发布时间】:2018-07-25 04:01:31
【问题描述】:

我在Employee 类中有一个名为calculatePay 的方法,它可以计算某些工资和税款。

public void calculatePay() {

    totalHoursWorked = 0;
    grossPay = 0;
    fedTax = 0;
    stateTax = 0;
    netPay = 0;
    totalTax = 0;

    for (int i = 0; i < getNoTimeCards(); i++) {

        TimeCard timeCard = getTimeCard(i);

        totalHoursWorked += timeCard.getHoursWorked();

    }

    grossPay = totalHoursWorked * payRate;

    if (grossPay >= 200) {

        fedTax = (grossPay - 200) * .1;

    } else {

        fedTax = 0;

    }

    stateTax = grossPay * .04;

    totalTax = fedTax + stateTax;

    netPay = grossPay - totalTax;

}

我需要在另一个名为Company 的类中创建一个名为calculatePay 的方法。在这个方法中,我需要创建一个循环来调用Employee 中的calculatePay 方法。在循环中调用方法与调用实例变量有什么不同吗?无论我尝试什么似乎都不起作用。以下是 i 当前对 Company 中的方法的内容:

public void calculatePay() {
    for (int i = 0; i < noEmployees; i++) {
        Employee employee = getEmployee(i);
        employee.calculatePay(); {
            return;
        }

}
}

在解释方面的任何帮助都会很棒。

【问题讨论】:

  • 你的方法中有一个奇怪的{ return; } 块。尝试修复你的缩进,你会更容易看到这类问题。
  • 什么不起作用?
  • 您的代码毫无意义。为什么你在那个循环中有一个 return 语句?那不应该在那里。当然,您正确调用了该方法,但由于它没有返回任何内容:您希望得到什么?
  • 我认为这里的关键问题是您不知道从方法返回值的语法。 Oracle 教程将是一个很好的起点(特别是处理 return values 的教程)。
  • 不工作的是我需要调用calculatePay方法,所以当我调用在calculatePay中计算的实例变量时,在我的打印方法中,它将显示结果而不是0。

标签: java loops methods instance-variables


【解决方案1】:

啊,我想我明白你想做什么了。

所以您尝试创建一个函数,然后尝试在调用它时使用括号使其返回计算值,不是吗?然而,这不是 Java 语法的工作原理。

Employee 中的calculatePay() 是一个 void 函数,这意味着它不会返回任何值。在这种情况下,您希望它返回double 类型的netPay。因此,您应该将函数定义为:

public double calculatePay() {
    // code
    netPay = grossPay - totalTax;
    return netPay;
}

而在Company 你会这样做

public  calculatePay() {
    for (int i = 0; i < noEmployees; i++) {
        Employee employee = getEmployee(i);
        System.out.println(employee.calculatePay());
    }
}

另外,请记住此代码不完整。如果您还希望Company 中的calculatePay() 返回总值或其他内容,您还需要将其返回类型更改为double

【讨论】:

  • 感谢您的回答,但我想要做的是让方法循环遍历所有调用 calculatePay 的员工。所以当我在我的打印方法中尝试System.out.printf("Hours Worked: %d%n", employee.getTotalHoursWorked()); 时,我得到的结果不是 0。
【解决方案2】:

我认为您的代码应该有两个列表,一个是员工列表,另一个是考勤卡。

public void calculatePay() 
{
    ...
   totalHoursWorked = getHoursWorked();
    ...
}

public void calculateEmployeesPay() 
{
    for(final Employee emp : EmployeeList)
    {
       emp.calculatePay(); 
    }
}

public double getHoursWorked()
{ 
    double totalHoursWorked = 0.0;

    for (final TimeCard tc : TimeCardList)
    {
        totalHoursWorked += tc.getHoursWorked();
    }
    return totalHoursWorked;
}

如果 calculatePay() 无效,则 netPay 必须更改为实例变量而不是本地变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多