0

有人可以解释为什么吗?当我使用 do-while 循环时,我总是遇到无限循环。我错过了什么?

package com.assignment2;

public class FooCorporation {

    public static void main(String[] args) {

        employee(9.50, 55);
        employee(8.20, 47);
        employee(10.00, 73);

    }

    public static void employee(double basePay, int hoursWorked) {

        double salary = 0;
        int overtimeHours = 40;

        do {
            if (basePay >= 8.00 || hoursWorked > 40 ) {
                if (hoursWorked > 40) {
                    salary = basePay * hoursWorked
                            * ((hoursWorked - overtimeHours) * 1.5);
                } else {
                    salary = basePay * hoursWorked;
                }

            }

            else 
                System.out.println("According to law: Base Pay should be more than $8.00");

            System.out.printf("Total Pay: %d %.2f\n", hoursWorked, salary);

        } while (hoursWorked <= 60);

    }

}
4

5 回答 5

9

您永远不会修改hoursWorked' 的值,因此始终满足条件,因此是无限循环。您需要在每次迭代结束时增加它的值,之后

    else 
        System.out.println("According to law: Base Pay should be more than $8.00");

    System.out.printf("Total Pay: %d %.2f\n", hoursWorked, salary);

    //Right here
} while (hoursWorked <= 60);

编辑就像加倍努力,我没有理解那个循环的含义。你什么时候会增加hoursWorked's 的价值?这不应该与特定员工有关吗?好像你想为每个工作 60 小时或更少的员工这样做。在这种情况下,您应该有一个Employee对象列表并对其进行迭代,只挑选那些工作了您想要的小时数的员工。

于 2012-11-12T18:37:07.903 回答
1

hoursWorked永远不会改变,所以你的循环条件永远不会是假的。

于 2012-11-12T18:37:17.283 回答
1

hoursWorked 的值永远不会改变。它始终小于或等于 60。

于 2012-11-12T18:37:28.420 回答
0

您的 while 条件永远不会停止。您没有在循环中修改 hoursWorked 的值,因此它将无限运行。然而,如果你传入一个大于 60 的值,那么它只会执行一次。

于 2012-11-12T18:38:09.037 回答
0

您设计代码的方式看起来根本不需要do-while loop块,因为您根本没有更改hoursworked值。

于 2012-11-12T18:46:00.147 回答