objectarray中对象的字段总和,都在构造函数中?

时间:2009-06-01 15:25:55

标签: java arrays sum

我有两个课程,一个用于文章,另一个用于购物车。购物车由一个对象数组组成,其中包含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 个答案:

答案 0 :(得分:2)

您正在尝试在构造函数中创建额外的方法。那不是个好主意。您还尝试按对象索引数组,这将无法正常工作。最后,您尝试在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 :(得分: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();
}

答案 2 :(得分:0)

查看代码,您在Warenkorb构造函数中使用“for”而不是“foreach”。

答案 3 :(得分:0)

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