2016-11-24 11 views
0

dicountPriceが対応するif文と等しくなるようにプログラムを作成しようとしています。私はそれが 私のif文の場合、または私のクラスで何かが不足している場合、あまりにも確信していません。私はsuper.purchasesとthis.purchasesをやってみましたが、今のところ私は困惑しています。継承クラスでの計算

サンプル出力:

名:白雪姫
住所:111ドワーフレーン
電話:555-0000
お客様番号:200-A010
顧客タイプ:プリファード
合計購入: 2566.0
総額:2566.0
合計割引率:0.0
合計Owed Mi NUSディスカウント:2566.0

しかし、私は、私はあなたのソースに表示されるものと10

TIA

public class Customer extends Person { 
protected String customerNumber, customerType; 
protected double purchases; 

Customer(){ 

    super(DEFAULT_VALUE,DEFAULT_VALUE,DEFAULT_VALUE); 
    setCustomerType(DEFAULT_VALUE); 
    setPurchases(0.0); 

} 

Customer(String name, String address, String phone, String cusNum, String cusType, double purch){ 
    super (name,address, phone); 
    customerNumber = cusNum; 
    customerType = cusType; 
    purchases = purch; 
} 
public void setCustomerNumber(String custNum){ 
    customerNumber = custNum; 
} 
public String getCustomerNumber(){ 
    return customerNumber; 
} 
public void setCustomerType(String cusType){ 
    customerType = cusType; 
} 
public String getCustomerType(){ 
    return customerType; 
} 
public void setPurchases(double purch){ 
    purchases = purch; 
} 
public double getPurchases(){ 
    return purchases; 
} 
public double getTotalOwed(){ 
    return purchases; 
} 
public String toString(){ 
     return super.toString() + "\nCustomer Number: " + customerNumber + "\nCustomer Type: " + customerType + 
       "\nTotal Purchases: " + purchases + "\nTotal Owed: " + purchases; 
} 
} 



public class PreferredCustomer extends Customer { 
    private double discountPercent=0.0; 

    PreferredCustomer(){ 
     super(DEFAULT_VALUE,DEFAULT_VALUE,DEFAULT_VALUE,DEFAULT_VALUE, DEFAULT_VALUE,0.0); 
    } 
    PreferredCustomer(String name, String address, String phone, String customerNumber, String customerType, double purchases){ 
     super (name, address, phone, customerNumber, customerType, purchases); 
    } 
    public void setDiscountPercent(double dp){ 
     discountPercent = dp; 

    } 
    public double getDiscountPercent(){ 
     if (purchases >= 2000){ 
      discountPercent = 100 * .10; 

     } 
     else if (purchases >= 1500 && purchases <2000){ 
      discountPercent = 100 * .7; 
     } 
     else if (purchases >= 1000 && purchases <1500){ 
      discountPercent = 100 * .6; 
     } 
     else if (purchases >=500 && purchases <1000){ 
      discountPercent= 100 * .5; 
     } 
     else if(purchases<500){ 
      discountPercent = 0; 
     } 

     return discountPercent ; 
    } 
    public double getTotalOwed(){ 
     return purchases - discountPercent; 
    } 
    public String toString(){ 
     return super.toString() + "\nTotal Discount Percent: " + discountPercent + "\nTotal Owed Minus Discount: " + this.getTotalOwed(); 
    } 
} 
+1

エラーは何ですか? – Marvin

+0

申し訳ありませんが、私はそれを指定していないが、discountPercentは0. – DontPrayForMe

+0

として返されています。 'Customer'クラスのソースと 'PreferredCustomer'オブジェクトをインスタンス化して印刷する方法を教えてください。 – speed488

答えて

0

する割引率を必要とする、問題がgetDiscountPercentから来ています。あなたは計算を行い、ゲッター関数のメンバを修正するのは悪い考えです。ゲッターはデータを返すだけで、クラスの内部状態は変更しないでください。

解決方法は、calculateDiscountPercentというプライベートメソッドを作成し、割引率の値に影響するメンバーを変更するときはいつでも内部的に呼び出すことです。このように:ソースから

private void calculateDiscountPercent(){ 
    if (purchases >= 2000){ 
     discountPercent = 100 * .10; 

    } 
    else if (purchases >= 1500 && purchases <2000){ 
     discountPercent = 100 * .7; 
    } 
    else if (purchases >= 1000 && purchases <1500){ 
     discountPercent = 100 * .6; 
    } 
    else if (purchases >=500 && purchases <1000){ 
     discountPercent= 100 * .5; 
    } 
    else if(purchases<500){ 
     discountPercent = 0; 
    } 
} 

、私はdiscountPercentがそのスーパークラスからpurchasesメンバーの影響を受けていることがわかります。そのため、セッター機能をオーバーライドして、購入が変わるたびに割引を​​計算します。これと同じように:

@Override 
public void setPurchases(double purch){ 
    super.setPurchases(purch); 
    this.calculateDiscountPercent(); 
} 

完全なクラスは次のようになります。

public class PreferredCustomer extends Customer { 
    private double discountPercent=0.0; 

    PreferredCustomer(){ 
     super(DEFAULT_VALUE,DEFAULT_VALUE,DEFAULT_VALUE,DEFAULT_VALUE, DEFAULT_VALUE,0.0); 
     this.calculateDiscountPercent(); 
    } 
    PreferredCustomer(String name, String address, String phone, String customerNumber, String customerType, double purchases){ 
     super (name, address, phone, customerNumber, customerType, purchases); 
     this.calculateDiscountPercent(); 
    } 
    public void setDiscountPercent(double dp){ 
     discountPercent = dp; 
    } 
    public double getDiscountPercent(){ 
     return discountPercent ; 
    } 
    @Override 
    public void setPurchases(double purch){ 
     super.setPurchases(purch); 
     this.calculateDiscountPercent(); 
    } 
    private void calculateDiscountPercent(){ 
     if (purchases >= 2000){ 
      discountPercent = 100 * .10; 

     } 
     else if (purchases >= 1500 && purchases <2000){ 
      discountPercent = 100 * .7; 
     } 
     else if (purchases >= 1000 && purchases <1500){ 
      discountPercent = 100 * .6; 
     } 
     else if (purchases >=500 && purchases <1000){ 
      discountPercent= 100 * .5; 
     } 
     else if(purchases<500){ 
      discountPercent = 0; 
     } 
    } 
    public double getTotalOwed(){ 
     return purchases - discountPercent; 
    } 
    public String toString(){ 
     return super.toString() + "\nTotal Discount Percent: " + discountPercent + "\nTotal Owed Minus Discount: " + this.getTotalOwed(); 
    } 
}