2009-06-01 13 views
1

私は記事用とカート用の2つのクラスを持っています。カートは、articleオブジェクトを含むオブジェクト配列で構成されています。objectarray内のオブジェクトのフィールドの合計。すべてがコンストラクタ内にありますか?

コンストラクタ内でforeachループを使って記事の価格を合計する必要があります。私は、コンストラクタ内でその型(おそらく間違っている)を書くとき、その型はdouble型として受け入れられません。どのようにオブジェクト配列内のオブジェクトのフィールドを集計することができますか?これをコンストラクタ内でどのように行うのですか(< - これは設計上の誤った判断ですが、クラス作業の一部です)。ここで

は私のクラスは次のとおりです。

package org.teubler.sucks.aufgaben; 
public class Artikel { 
    public enum Warengruppe{ 
     A, B, C, S 
    } 
    String name; 
    double verkaufspreis; 
    Warengruppe Art; 

    Artikel(String name, double preis){ 
     this.name = name; 
     this.verkaufspreis = preis; 
     this.Art = Warengruppe.S; 
    } 
    public double getVerkaufspreis() { 
     return verkaufspreis; 
    } 
    public void setWarengruppe(Warengruppe Art) { 
     switch(Art){ 
      case A:Art = Warengruppe.A; 
      case B:Art = Warengruppe.B; 
      case C:Art = Warengruppe.C; 
      default: Art = Warengruppe.S; 
     } 
    } 
} 

第二のクラス

package org.teubler.sucks.aufgaben; 
import java.util.Random; 
public class Warenkorb { 
    String kunde; 
    Artikel artikelliste[]; 
    int sessionid; 

    Random s = new Random(); 

    Warenkorb(String kunde, Artikel[] artikel){ 
     this.kunde = kunde; 
     this.artikelliste = artikel; 
     this.sessionid = s.nextInt(); 
     public double gesamtpreis(){ 
      double summe = 0; 
      for(Artikel preis : artikel){ 
       summe += artikel.getVerkaufspreis(); 
      } 
      return summe; 
     } 
    } 

} 

答えて

2

あなたは、コンストラクタ内の余分な方法を作成しようとしています。それは良い考えではありません。また、オブジェクトによって配列のインデックスを作成しようとしていますが、これはうまくいきません。最後に、強いタイプのArtikelの代わりにObjectgetVerkaufspreis()を呼び出しようとしています。これを試してみてください:

Warenkorb(String kunde, Artikel[] artikel){ 
    this.kunde = kunde; 
    this.artikelliste = artikel; 
    this.sessionid = s.nextInt(); 
    double summe = 0; 
    for (Artikel preis : artikel) { 
     summe += preis.getVerkaufspreis(); 
    } 
} 

ループの最後までに、あなたはそれをどうしますか? 、

Warenkorb(String kunde, Object[] artikel){ 
    this.kunde = kunde; 
    this.artikelliste = artikel; 
    this.sessionid = s.nextInt(); 
    double summe = 0; 
    for (Object preis : artikel) { 
     summe += ((Artikel)preis).getVerkaufspreis(); 
    } 
} 
1

まず、あなたがすべき:私はあなたが絶対にを持っているなら、あなたは、各反復上にキャストしなければならない代わりにArtikel[]Object[]を使用する

...あなたはそれのためのフィールドを作成したい疑いますArtikelの配列を持ち、Objectではありません。 Objectsでこれほど多くをすることはできません。

合計は次のように行くだろう、あなたはArtikel[]artekellisteを変更すると仮定すると:あなたが強化さ-ためのループを使用する場合

for(Artikel preis : artikelliste){ 
    summe += artikel.getVerkaufspreis(); 
} 

、明示的な配列インデックスは必要ありません。

また、コンストラクタ内にメソッドを配置することはできません。あなたはこのように、コンストラクタの外にgesamtpreis()を引っ張っする必要があります。

Warenkorb(String kunde, Artikel[] artikel){ 
    this.kunde = kunde; 
    this.artikelliste = artikel; 
    this.sessionid = s.nextInt(); 
} 
public double gesamtpreis(){ 
    double summe = 0; 
    for(Artikel preis : artikelliste){ 
     summe += artikel.getVerkaufspreis(); 
    } 
    return summe; 
} 

注意点として、あなたは配列のインデックスとしてObjectを使用することはできません。同等の標準のためのループがあなたの代わりにあなたのWarenkorbのコンストラクタで「foreachの」の「のために」を使用している、あなたのコードを見てみると

for(int i = 0; i < artikelliste.length; i++) { 
    summe += artikelliste[i].getVerkaufspreis(); 
} 
0

summe変数をコンストラクタから移動し、関数内にラップすることなくループを実行します。あるいは、関数gesamtpreis全体を移動して、コンストラクタから呼び出します。

double summe; 

Warenkorb(String kunde, Object[] artikel){ 
    this.kunde = kunde; 
    this.artikelliste = artikel; 
    this.sessionid = s.nextInt(); 
    this.summe = gesamtpreis(); 
} 

public double gesamtpreis(){ 
    double _summe = 0; 
    for(Object preis : artikelliste){ 
      _summe += artikelliste[preis].getVerkaufspreis(); 
    } 
    return _summe; 
} 
関連する問題