مجموع مجالات الكائنات في Objectarlay، كل ذلك داخل المنشئ؟

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

  •  06-09-2019
  •  | 
  •  

سؤال

لدي فئتين، واحد للمقالات وآخر للعربة. تتكون العربة من مجموعة كائن، والتي تحتوي على article أشياء.

أحتاج إلى تلخيص أسعار المقالات مع حلقة foreach- داخل المنشئ. عندما أكتب الطريقة (ربما تكون خاطئة) داخل المنشئ من نوعها غير مقبول على أنه مزدوج. كيف يمكنني تلخيص حقول الكائنات داخل مجموعة كائن وكيفية القيام بذلك داخل المنشئ (<- هذا يبدو وكأنه قرار تصميم سيء، لكنه جزء من عمل فئة مايو).

فيما يلي فصولي:

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() على Object, ، بدلا من مكتوبة بقوة Artikel. وبعد جرب هذا:

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

الآن بحلول نهاية الحلقة، سيكون لديك المبلغ - ولكن ماذا تريد أن تفعل ذلك؟ أظن أنك تريد إنشاء حقل لذلك ...

إذا كنت بالتأكيد يملك لاستخدام an. 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();
}

بالنظر إلى التعليمات البرمجية الخاصة بك، فأنت تستخدم "ل" بدلا من "foreach" في منشئ Warenkorb الخاص بك.

حرك ال 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