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の値を増やすのはいつですか? それは特定の従業員に関連するものであるべきではありませんか?60 時間以下で働いたすべての従業員に対してそれを実行したい場合のようです。その場合、Employeeオブジェクトのリストを取得し、それらを繰り返し処理して、必要な時間だけ働いた従業員のみをピックアップする必要があります。

于 2012-11-12T18:37:07.903 に答える
1

hoursWorked変更されないため、ループ条件が false になることはありません。

于 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 に答える