Java中的无限do..while循环

时间:2012-11-12 18:35:43

标签: java do-while

有人可以解释原因吗?当我使用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);

    }

}

5 个答案:

答案 0 :(得分: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的价值?这不应该是与特定员工相关的事情吗?似乎你想为每个工作60小时或更短时间的员工做这件事。在这种情况下,您应该有一个Employee个对象的列表并对它们进行迭代,只选择那些工作了您想要的小时数的员工。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

小时工作的价值永远不会改变。它始终小于或等于60。

答案 3 :(得分:0)

永远不会遇到你的状态。您没有在循环中修改hoursWorked的值,因此它将以无限的方式运行。但是,如果传入值> gt; 60,然后它只会执行一次。

答案 4 :(得分:0)

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