Objektorientiertes Programmieren mit Vererbung (Zahlen in Array verschwinden)

00111010101

Neues Mitglied
Moin,
Ich habe ein Problem. Ich habe 1 Array erstellt. Dieses Array sollte eigentlich befüllt sein. Die erste Ausgabe (0.85) ist richtig. Bei der 2 Ausgabe ist jedoch ein Fehler. Die 0.85 verschwinden einfach.
Es sollte so aussehen:
1 ausgabe
Test : 0.85
Test : 0.0
Test : 0.0
Test : 0.0
2 ausgabe
Test : 0.85
Test : 12.0
Test : 0.0
Test : 0.0
Warum verschwindet bei der 2 Ausgabe die 0.85, obwohl es ein einziger Array ist.
Btw. dieses "Array" ist bei mir in einer anderen Klasse
und die Ausgabe vom Array ist in einer anderen Klasse (= da wurden auch die Zahlen zugewiesen in den Array)
 

Anhänge

  • Screenshot (117).png
    Screenshot (117).png
    2,4 KB · Aufrufe: 0
  • Screenshot (118).png
    Screenshot (118).png
    2,3 KB · Aufrufe: 1
Java:
public void orderedBreads() {
        fam.orderName[0] = "Semmel";
        fam.orderName[1] = "Kaesesemmel";

        System.out.println("Wie viele " + fam.orderName[0] + " möchten Sie bestellen");
        total = fam.sc.nextInt();
        counter++;
        addOrder();

        System.out.println("Wie viele " + fam.orderName[1] + " möchten Sie bestellen");
        total = fam.sc.nextInt();
        counter++;
        addOrder();
    }


        public void orderedMeat(){
            fam.orderName[2] = "Rindfleisch";
            fam.orderName[3] = "Schaffleisch";

            System.out.println(counter);
            System.out.println("Wie viele " + fam.orderName[2] + " möchten Sie bestellen");
            total = fam.sc.nextInt();
            counter++;
            addOrder();

            System.out.println("Wie viele " + fam.orderName[3] + " möchten Sie bestellen");
            total = fam.sc.nextInt();
            counter++;
            addOrder();
        }

public void addOrder() {                     //Bread
        if (total > 0 && counter == 1) {
            fam.orderQuantity[2] = total;
            fam.pricePerProduct[0] = +fam.orderQuantity[2] * 0.15;
        }

        if (total > 0 && counter == 2) {
            fam.orderQuantity[3] = total;
            fam.pricePerProduct[0] += fam.orderQuantity[3] * 0.70;
            System.out.println(fam.pricePerProduct[0]);
            getTotalAmount(array.pricePerProduct);
        }


                                                        //Meat
        if (total > 0 && counter == 3) {
            fam.orderQuantity[4] = total;
            fam.pricePerProduct[1] += fam.orderQuantity[4] * 7.0;
        }

        if (total > 0 && counter == 4) {
            fam.orderQuantity[5] = total;
            fam.pricePerProduct[1] += fam.orderQuantity[5] * 5.0;
            System.out.println(fam.pricePerProduct[1]);
            getTotalAmount(array.pricePerProduct);
        }
   
    void getTotalAmount(double [] pricePerProduct1){
        for (int i = 0; i < 4; i++) {
            System.out.println("Test: " + pricePerProduct1[i]);
        }
    }
Java:
String [] orderName = new String[20];
    int []orderQuantity = new int[20];
    double [] pricePerProduct = new double[4];
 
Ich denke, dass der Codeauszug so nicht ausreicht um den Fehler zu finden.

Kernpunkt ist aber auch eine extrem mangelhafte Kapselung. Du greifst direkt auf Attribute von fam zu - was auch immer fam sein mag (Details fehlen). fam wird auch irgendwie nicht zentral initialisiert sondern das landet dann mit in irgendwelchen Bestellmethoden.

Die Bestellmethoden müssen dann (wegen dieser dubiosen Verwendung vom counter) in einer ganz speziellen Reihenfolge aufgerufen werden. Es gibt eine Außenabhängigkeit, die so zumindest extrem unerwartet ist.

Unter dem Strich nutzt du die Instanzvariablen counter und total zur Übergabe von Daten an addOrder. Um Daten an eine Methode zu übergeben sollte man eigentlich Parameter nutzen!


Bei addOrder hat man dann extrem viel doppelten Code. Unter dem Strich ist da vermutlich immer ein:
Java:
        if (total > 0 ) {
            fam.orderQuantity[counter + 1] = total;
            fam.pricePerProduct[0] += fam.orderQuantity[counter + 1] * fam.pricePerProduct[counter + 1];
        }

Davor evtl. den Wert von counter validieren. Die pricePerProduct wären natürlich korrekt zu initialisieren.

Und natürlich die Logik generell überdenken - denn bei counter == 1 wird der pricePerProduct[0] reseted.

Und die Bezeichner sind so schlecht - pricePerProduct[0] hat ja ganz offensichtlich einen Gesamtpreis.
 

Zurück
Oben