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