Сумма полей объектов в массиве объектов, все в конструкторе? - PullRequest
1 голос
/ 01 июня 2009

У меня есть два класса, один для статей, а другой для корзины. Корзина состоит из массива объектов, который содержит article объектов.

Мне нужно суммировать цены статей с помощью цикла 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;
        }
    }

}

Ответы [ 4 ]

2 голосов
/ 01 июня 2009

Вы пытаетесь создать дополнительный метод в конструкторе. Это не очень хорошая идея. Вы также пытаетесь проиндексировать массив по объекту, который не будет работать. Наконец, вы пытаетесь вызвать 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();
    }
}

Теперь к концу цикла у вас будет сумма - но что вы хотите с ней сделать? Я подозреваю, что вы хотите создать поле для этого ...

Если у вас абсолютно есть , чтобы использовать 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();
    }
}
1 голос
/ 01 июня 2009

Во-первых, у вас должен быть массив 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();
}
0 голосов
/ 01 июня 2009

Переместите переменную 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;
}
0 голосов
/ 01 июня 2009

Глядя на свой код, вы используете «for» вместо «foreach» в конструкторе Warenkorb.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...