2016-11-15 5 views
-5

抽象クラスJavaなぜ私のプログラムは0.00しか印刷されないのですか?抽象クラスJavaなぜ私のプログラムは0.00しか印刷されないのですか?

public class TestEmployee 
{ 
    public static void main(String[] args) 
    { 
     Employee[] folks = new Employee[4]; 

     folks[0] = new SalariedEmployee("Suzy",123,520000.00); 
     folks[1] = new WageEmployee("Fred",456,7.50,40); 
     folks[2] = new SalariedEmployee("Harry",234,45000.00); 
     folks[3] = new WageEmployee("Rita",345,7.76,38); 

     for(int i=0; i<folks.length; i++) 
     { 
      System.out.println(folks[i].getName() 
      + " earns " + folks[i].getMonthlyPay() + " each month"); 
     } 
    } 
} 

私は プログラムをコンパイルし、適切

abstract class Employee 
{ 
    private String name; 
    private int number; 
    public abstract double getMonthlyPay(); 

    public Employee(String name, int number, double salary) 
    { 
     setName(name); 
     setNumber(number); 
     salary = getMonthlyPay(); 
    } 

    public Employee(String name, int number, double salary, int hours) 
    { 
     setName(name); 
     setNumber(number); 
     salary = getMonthlyPay(); 
    } 

    public String getName() 
    { 
     return this.name; 
    } 

    public int getNumber() 
    { 
     return this.number; 
    } 

    public String setName(String name) 
    { 
     this.name = name; 
     return this.name; 
    } 

    public int setNumber(int number) 
    { 
     this.number = number; 
     return this.number; 
    } 
} 

実行させるために必要な不足しているクラスを追加私のプログラムだけゼロを印刷している理由として説明や洞察を提供してください。私は私の問題は、それは0.00から来てどこへ戻って追跡するために、あまりにも難しいことではありません

class SalariedEmployee extends Employee 
{ 
    private double yearSalary; 

    public SalariedEmployee(String name, int number, double salary) 
    { 
     super(name, number, salary); 
     yearSalary = getMonthlyPay(); 
    } 

    public double getMonthlyPay() 
    { 
     double monthlyPay = yearSalary/12; 
     return monthlyPay; 
    } 

    public String toString() 
    { 
     return(super.getName() + ", " + super.getNumber() + ", " + getMonthlyPay()); 
    } 

} 

class WageEmployee extends Employee 
{ 
    private double wage; 
    private int hours; 

    public WageEmployee(String name, int number, double salary, int hours) 
    { 
     super(name, number, salary, hours); 
    } 

    public double getMonthlyPay() 
    { 
     double monthlyPay = wage * hours * 4; 
     return monthlyPay; 
    } 

    public String toString() 
    { 
     return(super.getName() + ", " + super.getNumber() + ", " + getMonthlyPay()); 
    } 
} 
+3

これは、デバッガの使用方法を学ぶのに最適な時間です。このツールを使用すると、まずバグを特定してから解決するのに役立ちます。副注釈として、これまたは任意のサイトにヘルプを掲載するコードを書いてみると、人々がそれを読むことができるように、それをうまく整形しようと努力すべきです。これには、コードに適切な規則的な字下げを与えることが含まれます。 –

+1

'public WageEmployee(String name、int number、double salary、int hours)' ...親クラス 'Employee'に互換性のある定義済みコンストラクタが表示されません。 –

+1

'yearSalary = getMonthlyPay()'を設定し、 'getMonthlyPay()'は 'monthlyPay = yearSalary/12'として定義されています。だから年間給与は月給に依存します。それはすでに本当に意味をなさない。また、 'yearSalary'変数をどこで初期化するかわかりません。 – nhouser9

答えて

1

をどこにあるか、これがあると思います。

メインループでは、folks[i].getMonthlyPay()を使用して印刷する番号を取得します。では、getMonthlyPay()の実装について見ていきましょう。 2つの実装があります:SalariedEmployeeと1つはWageEmployeeです。

SalariedEmployeeの場合、getMonthlyPayメソッドは、フィールドyearSalaryの値を使用します。 yearSalaryにはどのような値が割り当てられていますか?エディタまたはIDEでyearSalaryのすべての出現箇所を見つけて、値が割り当てられている場所を確認してください。あなたはどこにも起こらないことが分かります。 yearSalaryはフィールド(より正確にはインスタンス変数)なので、Javaは最初から0.00を割り当てます(メソッド内のローカル変数は異なります)。他の値を決して割り当てないので、getMonthlyPay()を12で割って結果を返すと、値は0.00のままです。これは0.00が出てくるところです。あなたはそれを修正する方法を見つけることができますか?

WageEmployeeの場合は、同じ演習を自分で試して、値がどこから来るのかをWageEmployee.getMonthlyPay()で調べる必要があります。今回は、wageの値とhoursの値がどこにあるのかを調べる必要があります。ハッピーサーチ。

関連する問題