1. ホーム
  2. java

[解決済み] javaの給与計算が0になる

2022-02-07 16:05:18

質問

問題は

従業員の名前、ID 番号、時給、勤務時間数などのフィールドを持つ Payroll クラスを設計します。従業員の名前と ID 番号を引数として受け取るコンストラクタの上に、適切なアクセッサとミューテータ・メソッドを記述してください。このクラスは、従業員の総支給額(勤務時間数に時給を掛けたもの)を返すメソッドも持っている必要があります。Payroll オブジェクトを作成し、従業員のデータを入力するようユーザーに求めることで、このクラスのデモンストレーションを行うプログラムを作成します。プログラムは、獲得した総支給額を表示する必要があります。
以下は、私が持っているクラスです。

import java.util.Scanner;   //Needed for scanner class.
public class Payroll
{
    private String EmployeeName;
    private int IDnumber;
    private double HourlyPayRate;
    private double HoursWorked;
    private double GrossPay;

    /**
        Constructor
        @param Name The name to store in EmployeeName.
        @param ID The ID to store in Employee ID number.
    */
    public Payroll(String Name, int ID)
    {
        EmployeeName = Name;
        IDnumber = ID;
    }
    public String getEmployeeName()
    {
        return EmployeeName;
    }
    public int getIDnumber()
    {
        return IDnumber;
    }
    public void setHourlyPayRate(double HourlyRate)
    {
        HourlyPayRate = HourlyRate;
    }
    public double getHourlyPayRate()
    {
        return HourlyPayRate;
    }
    public void setHoursWorked(double hoursWorked)
    {
        HoursWorked = hoursWorked;
    }
    public double getHoursWorked()
    {
        return HoursWorked;
    }
    public double getGrossPay()
    {
        return HourlyPayRate * HoursWorked;
    }
}

コンストラクタ

import java.util.Scanner;   //Needed for Scanner class.

public class PayrollTest
{
    public static void main(String[] args)
    {
        String EmployeeName;
        int IDnumber;
        double HoursWorked;
        double HourlyPayRate;
        double GrossPay;

        //Create a Scanner object for keyboard input.
        Scanner keyboard = new Scanner(System.in);

        //Get the employee's name.
        System.out.println("Enter an employee's name: ");
        EmployeeName = keyboard.nextLine();

        //Get the employee's ID.
        System.out.println("Enter the employee's ID " );
        IDnumber = keyboard.nextInt();

        //Get the number of hours worked by the employee.
        System.out.println("Enter the amount of hours worked by this employee: ");
        HoursWorked = keyboard.nextDouble();

        //Get the hourly pay rate of the employee.
        System.out.println("Enter the hourly pay rate for this employee: ");
        HourlyPayRate = keyboard.nextDouble();

        //Create a payroll object, passing EmployeeName and IDnumber
        // as arguments to the constructor.
        Payroll pay = new Payroll(EmployeeName, IDnumber);

        //Get the Gross Pay of the employee.
        System.out.println("The gross pay of " + EmployeeName + " is: " + pay.getGrossPay());
    }
}

コンパイル時にエラーは出なかったのですが、最後にgrosspay = 0.0という結果が出続けています。

どうすればいいですか?

新しい Payroll オブジェクト

Payroll pay = new Payroll(EmployeeName, IDnumber);

を呼び出して getGrossPay() メソッドを実行します。

pay.getGrossPay()

というメソッドがあり、そのメソッドは次のようになります。

return HourlyPayRate * HoursWorked;

を設定しないので HourlyPayRate または HoursWorked の場合、もちろんこのメソッドは0を返します。

これを解決するには、それらの値をユーザーから読み取った変数に設定します。

pay.setHoursWorked(HoursWorked);
pay.setHourlyPayRate(HourlyPayRate);

を作成した後に、これらの行を追加することができます。 Payroll オブジェクトを呼び出す前に getGrossPay() メソッドを使用します。ですから、コードの最後の4行は次のようになっているはずです。

Payroll pay = new Payroll(EmployeeName, IDnumber);

//set pay rate and hours worked
pay.setHoursWorked(HoursWorked);
pay.setHourlyPayRate(HourlyPayRate);

//Get the Gross Pay of the employee.
System.out.println("The gross pay of " + EmployeeName + " is: " + pay.getGrossPay());