すべてのコンストラクタ内objectarray内のオブジェクトのフィールドの合計?

StackOverflow https://stackoverflow.com/questions/935297

  •  06-09-2019
  •  | 
  •  

質問

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

}
役に立ちましたか?

解決

あなたは、コンストラクタ内の余分なのメソッドを作成しようとしています。それはいい考えではありません。あなたはまた、動作しませんオブジェクトによってインデックスに配列をしようとしています。最後に、あなたの代わりに、強く型付けされた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();
    }
}

さて、ループの最後で、あなたは合計を持っているだろう - しかし、あなたはそれをどうするかをしたいですか?私はあなたがそれのためのフィールドを作成したい疑い...

あなたは絶対にのHAVE の、あなたが各反復上にキャストしなければならない代わりにObject[]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();
    }
}

他のヒント

まず、あなたがArtikelの配列を持っている必要があり、Objectありません。あなたはObjectsで多くを行うことはできません。

あなたはartekellisteするArtikel[]を変更すると仮定すると、合計は次のように行くだろう。

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を使用することはできません。同等の標準のためのループは次のようになります。

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

あなたのコードを見て、あなたの代わりにあなたのWarenkorbのコンストラクタで「foreachの」の「のために」を使用しています。

コンストラクタのうち、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;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top