1

記事用とカート用の 2 つのクラスがあります。カートは、オブジェクトを含むarticleオブジェクト配列で構成されます。

コンストラクター内で foreach ループを使用して記事の価格を合計する必要があります。コンストラクター内でメソッドを記述すると (おそらく間違っています)、その型は double として受け入れられません。オブジェクト配列内のオブジェクトのフィールドを合計する方法と、コンストラクター内でこれを行う方法 (<- これは悪い設計上の決定のように見えますが、5 月のクラス作業の一部です)。

ここに私のクラスがあります:

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;
        }
    }

}
4

4 に答える 4

2

コンストラクター内で追加のメソッドを作成しようとしています。それは良い考えではありません。また、オブジェクトによって配列にインデックスを付けようとしていますが、これは機能しません。最後に、厳密に型指定されgetVerkaufspreis()たではなく、を呼び出そうとしています。これを試して:ObjectArtikel

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();
    }
}

ループの終わりまでに合計が得られますが、それで何をしたいですか? そのためのフィールドを作成したいと思われます...

絶対Object[]an の代わりに anを使用する必要があるArtikel[]場合は、各反復でキャストする必要があります。

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();
    }
}
于 2009-06-01T15:31:48.363 に答える
1

Artikelまず、ではなくの配列が必要ですObject。では多くのことはできませんObjects

に変更artekellisteするArtikel[]と、合計は次のようになります。

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

拡張 for ループを使用する場合、明示的な配列インデックスは必要ありません。

また、コンストラクター内にメソッドを配置することはできません。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補足として、を配列インデックスとして使用することはできません。同等の標準 for ループは次のようになります。

for(int i = 0; i < artikelliste.length; i++) {
    summe += artikelliste[i].getVerkaufspreis();
}
于 2009-06-01T15:32:17.380 に答える