-1

上の変数 netPay

System.out.println("\t Regular Pay for 40.0 hour(s): $" + netPay);

初期化されていないと言い続けます。それが機能するのは、if-else ステートメントを実行するときだけです。

public static void main(String [] args){
    int employeeNumber;
    double hourlySalary, weeklyTime, netPay, overTime, overTimehours;

    Scanner keyboard= new Scanner(System.in);
    System.out.println("Welcome to \"TEMPLE HUMAN RESOURCES\"");
    System.out.println();
    System.out.print("\t Enter Employee Number: ");
    employeeNumber=keyboard.nextInt();
    System.out.print("\t Enter Hourly Salary: ");
    hourlySalary=keyboard.nextDouble();
    System.out.print("\t Enter Weekly Time: ");
    weeklyTime=keyboard.nextDouble();
    System.out.println();

    overTimehours=weeklyTime-40;
    overTime=(1.5*10)*hourlySalary;

    if (weeklyTime>40) {
        netPay=(weeklyTime*hourlySalary)+(overTime*overTimehours);
    }else if (weeklyTime==40){
        netPay=40*hourlySalary;
    }else {
        overTimehours=0;
        overTime=0;
    }

    System.out.println("\t Employee #: " + employeeNumber);
    System.out.println("\t Hourly Salary: $" + hourlySalary);
    System.out.println("\t Weekly Time: " + weeklyTime + " hour(s)");
    System.out.println("\t Regular Pay for 40.0 hour(s): $" + netPay);
    System.out.println("\t Overtime Pay for " +overTimehours+ " hour(s): $" + overTime);
    System.out.println("\t Net Pay: $" + (overTime+ netPay));
    System.out.println();
    System.out.println("Thank you for using \"Temple Human Resources\"");
}
4

3 に答える 3

1

それが 40 未満だったと想像してくださいweeklyTime(例として 20 としましょう)。

netPayスコープ内にありますがif (weeklyTime>40)、ブロックもelse if (weeklyTime==40)ブロックもそれを初期化するために動作しません。ブロックは実行されelseますが、まったく初期化されませんnetPay。値を指定するには、else ブロックを変更する必要がありnetPayます。このelseブロックで使用する式を知るために、純給与を計算するためのルールについて十分に知りません(weeklyTime < 40は、それを入力するための(暗黙の)条件です)

于 2014-09-23T00:10:56.783 に答える
0

はい、それは最初の 2 つのブロックnetPayでのみ初期化されているためです。ifそれらの条件が満たされない場合はどうなりますか?宣言したときにその値を初期化しておらず、内部でも設定していないためelse、その場合は初期化されていません。

できることは、次のように、宣言した瞬間に初期化することです。

double netPay = 0;

またはelse、次のようにブロックに設定します。

else {
    overTimehours = 0;
    overTime = 0;
    netPay = 0;
}
于 2014-09-23T00:23:27.740 に答える