2010-11-30 25 views
0

私はクラス割り当てのための従業員、マネージャー、時間労働者のコードを書いていますが、私は理解できない問題にぶつかった、次は従業員のためのコードと時間労働者です。問題は時間ごとの作業者がコンパイルされないことです。コンパイルしようとすると "シンボルコンストラクタの従業員を見つけることができません"というエラーが表示されます。 !。もはや問題の感謝のPieterを見ることができないJavaコンパイラエラー: "シンボルコンストラクタを見つけることができません.."

Employeeクラス - 。

public class Employee 
{ 
    public String firstName; 
    public String lastName; 
    public double hourlyRate; 
    final static double NORMAL_WORKWEEK = 37.5; 

    public Employee(String firstName, String lastName, double hourlyRate) 
    { 
     setFirstName(firstName); 
     setLastName(lastName); 
     setHourlyRate(hourlyRate); 
    } 
    //Accessor and Mutator Methods for the employee's first name. 
    public String getFirstName() 
    { 
     return firstName; 
    } 

    public void setFirstName(String firstName) 
    { 
     firstName = firstName; 
    } 
    //Accessor and Mutator Methods for the employee's last name. 
    public String getLastName() 
    { 
     return lastName; 
    } 

    public void setLastName(String lastName) 
    { 
     lastName = lastName; 
    } 
    //Access and Mutator Methods for the employee's hourly rate. 
    public double getHourlyRate() 
    { 
     return hourlyRate; 
    } 
    public void setHourlyRate(double hourlyRate) 
    { 
    //If the user input is valid, update the employee's hour rate with the newly input value. 

    if(hourlyRate > 0) 
    { 
     hourlyRate = hourlyRate; 
     } 
     //Otherwise prevent an hour rate greater than zero being overwritten 
     else if(hourlyRate <=0) 
     { 

    if(hourlyRate <= 0) 
    {   
      hourlyRate = 0; 
      } 

    decorateConsole(); 

    //Alert the user to their mistake. 
    System.out.println("Error ! ! ! - An attempt to set the employee " + this.firstName + " " + this.lastName + "'s hourly rate to zero was detected.\n"); 

    decorateConsole(); 

    } 


} 

public void printState() 
{ 

    decorateConsole(); 

    System.out.println("[FIRST NAME] = " + firstName + " [LAST NAME] = " + lastName + " [HOURLY RATE] = " + hourlyRate + "\n"); 

    decorateConsole(); 

} 

public void decorateConsole() 
{ 

    System.out.println("+-< EMPLOYEE INFO >-------------------------------------------------------------------------------------------------------------------------+\n"); 

} 

HOURLY WORKERのCLASS -

public class HourlyWorker extends Employee 
{ 
    private double wage; 
    private double hours; 

    public HourlyWorker(String firstName, String lastName, double hourlyWage, double hoursWorked) 
    { 
     super(firstName, lastName); 
     this.wage = wage; 
     this.hours = hours; 
    } 

    public void setWage (double hourlyWage) 
    { 
     this.wage = wage; 
    } 
    public void getWage() 
    { 
     return wage; 
    } 
    public void setHours (double hours) 
    { 
     this.hours = hours; 
    } 
    public double getHours() 
    { 
     return hours; 
    } 




} 
+0

あなたのコンパイルコマンドは何ですか? – dacwe

+2

次回エラーコードを貼り付けることをお勧めします。エラーをそのように見分ける方が簡単です。 – OscarRyz

+0

セッターが壊れています。 'firstName = firstName' - ' firstName'(ローカル変数)の値をローカル変数 'firstName'に代入します(つまり、それ自身をオーバーライドします)。 'this.firstName = firstName'と書くべきです。 – Crozin

答えて

9

super(firstName, lastName); 

を使用してみてください:uは二つのパラメータを持つEmployeeコンストラクタがありません

super(firstName, lastName, 0.0); 

EDITトニー要求ごとなどを、ここではより詳細な説明があります。

super(firstName, lastName);では、2つの文字列パラメータを持つEmployeeクラスのコンストラクタを呼び出す(呼び出しようとしています)。

Employeeクラス定義を見直し、我々はあなたがそのようなコンストラクタを持っていない参照が、あなたは三つのパラメータを持つ1持っている:

public Employee(String firstName, String lastName, double hourlyRate) 

ので、解決策ではなく、そのコンストラクタを呼び出すことですが。 hourlyRateのデフォルト値がないので、0.0をdoubleとして使用できます。

他の代替は、あなたが

super(firstName, lastName); 

呼び出すHourlyWorkerEmployeeクラス

public Employee(String firstName, String lastName) 
+0

オスカーに感謝します。0.0を追加して(public void getWageをpublic double getWageに変更すると)問題は解決しますが、理由はわかりません。0解決済みか、少なくとも解決したようですか? – tony

+0

@tony:Surre、私は答えを更新しました。十分に明確であれば教えてください – OscarRyz

+0

オスカーに感謝します。それは非常に役に立ちます - 私は特に迅速な対応に感謝します!トニー – tony

2

に2つのパラメータのコンストラクタを作成することですが、Employeeコンストラクタは

Employee(String, String, double) 

署名です一致しません。

編集:ちなみに、HourlyWorkerにプライベートwageのメンバーがあるのはなぜですか? Employee.hourlyRateとはどのように(概念的に)違うのですか?

+0

おかげさまでキャメロンは、私的な賃金と時間単位の料金の重複は私のエラーです、あまりにもそれを修正します!乾杯。 – tony

1

スーパーコンストラクタでは2つの引数しか取れません。

+0

他の人達がもっと速くなった... –

1

HourlyWorkerのコンストラクタはsuper(firstName, lastName)を呼び出そうとしますが、親クラスにそのようなコンストラクタが宣言されていません。

0

ここにはelse ifの周りに何か怪しいものがあります。別のifといくつかの中括弧が抜けて繰り返されます。コードを正しくインデントし、開いているかっこが閉じているかどうかを確認してください。意図したとおりに

if(hourlyRate > 0) 
    { 
     hourlyRate = hourlyRate; 
     } 
     //Otherwise prevent an hour rate greater than zero being overwritten 
     else if(hourlyRate <=0) 
     { 

    if(hourlyRate <= 0) 
    {   
      hourlyRate = 0; 
      } 

    decorateConsole(); 

また、ラインのこれらの種類は、(あなたがそれらの3を持って)動作しません。

firstName = firstName; 

それはでなければなりません:

this.firstName = firstName; 

あなたの中に持っているように2番目のクラス。あなたの従業員クラスに一致するコンストラクタがありません、

super(firstName, lastName); 

しかし:あなたのHourlyWorkerクラスで

1

は、次のコード行を持っています。基本的に、コンパイラは

public Employee(String firstName, String lastName) 
{ 
    ... 
} 

...何かなどのために、あなたの従業員のクラスに見ている新しいコンストラクタを定義するか、あなたが不足しているパラメータで定義したコンストラクタを呼び出します。

+0

すばらしいフィードバックをいただきありがとうございます。私はそれが今では大丈夫だと思う、少なくともコンパイルしている(オスカーとSnakileの上記の入力によると)。 – tony

1

HourlyEmployeeの基本クラスコンストラクタ(従業員のctor)に、必要な3つの引数ではなく2つの引数を指定します。

あなたは、このような従業員のコンストラクタを呼び出すようにしようとしたHourlyWorkerコンストラクタで
super(firstName, lastName, hourlyWage); 
4

super(firstName, lastName); 

変更HourlyEmployeeのctorの中にラインから

super(firstName, lastName); 

が、従業員クラスには、2つのパラメータを持つコンストラクタがありません。あなたはこのように三番目のパラメータ(時給)を渡す必要があります。

super(firstName, lastName, 42); 
+0

私はありがとう、oscarryzは上記のような何かを言及し、それはあなたの支援のおかげで説明しますsnakile – tony

2

あなたHourlyWorkerクラスでは次の2つの引数を持つ従業員{スーパー(FIRSTNAME、姓)}のコンストラクタを呼び出しているが、Employeeクラスではそうでありません2つの引数を取るコンストラクタを持つ。

+0

感謝amrish、私は今そこにいると思う... tony – tony

1

それでも

public Employee(String firstName, String lastName) { ... }

のようなコンストラクタを持っていたいと思っていると、あなたのdouble hourlyRateからデフォルト値を知っている場合も、あなたは次のような新しいコンストラクタを記述しようとすることができます。

`公務員(文字列firstNameの文字列lastNameの) {

 Employee(firstName, lastName, 0.0); 

} `

関連する問題