1

我有两个课,一个是文章课,另一个课是购物车课。购物车由一个包含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;
        }
    }

}
4

4 回答 4

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

现在到循环结束时,您将得到总和 - 但您想用它做什么?我怀疑你想为它创建一个字段......

如果您绝对必须使用 anObject[]而不是 anArtikel[]那么您应该在每次迭代中强制转换:

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();
    }
}
于 2009-06-01T15:31:48.363 回答
1

首先,你应该有一个数组Artikel,而不是Object。你不能用Objects.

假设您更改artekellisteArtikel[],总和将如下所示:

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

附带说明,您永远不能将 anObject用作数组索引;等效的标准for循环将是

for(int i = 0; i < artikelliste.length; i++) {
    summe += artikelliste[i].getVerkaufspreis();
}
于 2009-06-01T15:32:17.380 回答
0

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

于 2009-06-01T15:34:09.233 回答
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;
}
于 2009-06-01T15:35:02.133 回答