0

コードのテスター クラスを作成する必要がありますが、これを行う方法がわかりません。誰か助けてもらえますか? これをコンパイルしようとしましたが、次のメッセージが表示されます。

2 つのエラーが見つかりました:

Error: The constructor PayCalculator() is undefined

Error: The method printData() is undefined for the type PayCalculatorTester

私のコード:

 {
    PayCalculator p1 = new PayCalculator();
    p1.setHourlyRate(8.25);
    p1.setHoursWorked(45);    
    printData();
  }

PayCalculator クラス

public class PayCalculator

{
  private double hourlyRate;
  private double hoursWorked;

  /**
   * Two parameter constructor
   * Add hourlyRate and hoursWorked
   * @param the hourly rate
   * @param the hours worked
   */
  public PayCalculator(double aHourlyRate, double aHoursWorked)
  {
    hourlyRate = aHourlyRate;
    hoursWorked = aHoursWorked;
  }

  /**
   * sets the hourly rate
   * @return hourlyRate
   */ 
  public void setHourlyRate(double aHourlyRate)
  {
    hourlyRate = aHourlyRate;
  }

  /**
   * gets the hourly rate
   * @param hourlyRate
   */
  public double getHourlyRate()
  {
    return hourlyRate;
  }

  /**
   * sets the hours worked
   * @return hoursWorked
   */ 
  public void setHoursWorked(double aHoursWorked)
  {
    hoursWorked = aHoursWorked;
  }

  /**
   * gets the hours worked
   * @param hours worked
   */
  public double getHoursWorked()
  {
    return hoursWorked;
  }



  public boolean workedOvertime()
  {
    if (hoursWorked > 40)
    {
      return true;
    }
    else 
    {
      return false;
    }
  }

  public double numHoursOvertime()
  {
    if (hoursWorked > 40)
    {
      return hoursWorked - 40;
    }
    else 
    {
      return 0;
    }
  }

  public double calculateGrossPay()
  {
    if (hourlyRate  <= 10.25)
    {
      if (hourlyRate <= 40)
        return hourlyRate * hoursWorked;
    }
    else 
    {  
      double grossPay = ((40 * hourlyRate) + ((hourlyRate * 2) * hoursWorked - 40));
      return grossPay;
    }

    if (hoursWorked <= 60)
    {
      return hourlyRate * hoursWorked;
    }
    else
    {
      return 60 * hourlyRate;
    }
  }

  public double determineTaxRate(double grossPay)
  {
    if (grossPay >= 800)
    {
      double tax = 0;
      tax = grossPay * 0.37;
      return tax;
    }
    else if ( grossPay >= 400)
    {
      double tax = 0;
      tax = grossPay * 0.22;
      return tax;
    }
    else
    {
      double tax = 0;
      tax = grossPay * 0.12;
      return tax;
    }
  }

  public double calculateNetPay(double grossPay, double tax)
  {
    double calculateNetPay = grossPay - tax;
    return calculateNetPay;
  }

  public void printData(double grossPay, double tax)
  {
    System.out.println("Hours Worked: " + hoursWorked);
    System.out.println("Hourly rate: " + hourlyRate);
    System.out.println("Number of hours of overtime worked: " + numHoursOvertime());
    System.out.println("Worked overtime? " + workedOvertime());
    System.out.println("Gross pay: " + calculateGrossPay());
    System.out.println("Tax Rate: " + determineTaxRate(grossPay));
    System.out.println("Net Pay: " + calculateNetPay(grossPay, tax));
  }

}
4

4 に答える 4

1

1、クラスにコンストラクターを定義していない場合、コンパイラーは暗黙的にデフォルトのコンストラクター(引数なし)を定義します。1つのコンストラクターを明示的に定義している場合。コンパイラはこれをもう行いません。そのため、デフォルトのコンストラクターPayCalculator()を使用できませんでした。

参照:クラスにコンストラクターを提供する

2、printDataはPayCalculatorのインスタンスメソッドです。PayCalculatorインスタンス、つまりp1.printData()を使用して呼び出す必要があります。setHourlyRateやsetHoursWorkedと同じです。

于 2013-03-08T04:09:26.197 に答える
1

これは、パラメータリストがメソッドの定義と一致しないためです。

また、コードに小さな矛盾があるようです。代わりにこれを試してください:

import java.io.*;
import java.util.*;

class PayCalculator
{
    private double hourlyRate;
    private double hoursWorked;

    /**
    * Two parameter constructor
    * Add hourlyRate and hoursWorked
    * @param the hourly rate
    * @param the hours worked
    */
    public PayCalculator(double hourlyRate, double hoursWorked)
    {
        this.hourlyRate = hourlyRate;
        this.hoursWorked = hoursWorked;
    }

    /**
    * gets the hourly rate
    * @param hourlyRate
    */
    public double getHourlyRate()
    {
        return hourlyRate;
    }

    /**
    * gets the hours worked
    * @param hours worked
    */
    public double getHoursWorked()
    {
        return hoursWorked;
    }

    public boolean workedOvertime()
    {
        if (hoursWorked > 40)
            return true;
        else
            return false;
    }

    public double numHoursOvertime()
    {
        if (hoursWorked > 40)
            return hoursWorked - 40;
        else
            return 0;
    }

    public double calculateGrossPay()
    {
        if (hourlyRate <= 10.25)
            if (hoursWorked <= 40)
                return hourlyRate * hoursWorked;
            else
                return ((40 * hourlyRate) + ((hourlyRate * 2) * hoursWorked - 40));
        if (hoursWorked <= 60)
            return hourlyRate * hoursWorked;
        else
            return 60 * hourlyRate;
    }

    public double determineTaxRate(double grossPay)
    {
        if (grossPay >= 800)
            return grossPay * 0.37;
        else if ( grossPay >= 400)
            return grossPay * 0.22;
        else
            return grossPay * 0.12;
    }

    public double calculateNetPay(double grossPay, double tax)
    {
        return (grossPay - tax);
    }

    public void printData(double grossPay, double tax)
    {
        System.out.println("Hours Worked: " + hoursWorked);
        System.out.println("Hourly rate: " + hourlyRate);
        System.out.println("Number of hours of overtime worked: " + numHoursOvertime());
        System.out.println("Worked overtime? " + workedOvertime());
        System.out.println("Gross pay: " + calculateGrossPay());
        System.out.println("Tax Rate: " + determineTaxRate(grossPay));
        System.out.println("Net Pay: " + calculateNetPay(grossPay, tax));
    }
}

class Test
{
    public static void main(String args[])    //main() method required to execute.
    {
        PayCalculator p1 = new PayCalculator(8.25,45);    //default constructor only exists if you do not define your own constructor.
        double myGrossPay = p1.calculateGrossPay();
        p1.printData(myGrossPay,p1.determineTaxRate(myGrossPay));    //requires said parameters.
    }
}
于 2013-03-08T04:10:06.577 に答える
1

「コンストラクタ PayCalculator() は未定義です」

クラスでパラメーターを持つ唯一のコンストラクターを定義したためです。Javaは、コンストラクターにパラメーターを提供している場合、パラメーターのないデフォルトのコンストラクターは提供されないと言います。したがって、それを明示的に提供する必要があります。または、あなたが宣言したものを使用してください。

「PayCalculatorTester 型の printData() メソッドは定義されていません」

このメソッドはクラスで定義されてPayCalculatorいるため、正しい構文が必要ですp1.printData();

于 2013-03-08T04:13:19.063 に答える
0

これは、オブジェクトのコンストラクターを呼び出す方法です。 PayCalculator p1 = new PayCalculator();

コンストラクターの定義方法は次のとおりです。

明らかにエラーが発生します。

于 2013-03-08T04:54:03.747 に答える