문제

나는 기사 용으로, 다른 하나는 카트 용으로 두 개의 수업을 가지고 있습니다. 카트에는 객체 배열이 포함되어 있습니다 article 사물.

기사의 가격을 생성자 내의 foreach-loop로 요약해야합니다. 제작자 내에서 메소드 (아마도 잘못된)를 작성할 때 유형보다 이중으로 허용되지 않습니다. 객체 배열 내의 객체 필드를 요약하는 방법과 생성자 내부 에서이 작업을 수행하는 방법 (<- 이것은 잘못된 디자인 결정처럼 보이지만 5 월 클래스 작업의 일부입니다).

내 수업은 다음과 같습니다.

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

이제 루프가 끝날 무렵에는 합이 될 것입니다. 그러나 당신은 그것으로 무엇을하고 싶습니까? 나는 당신이 그것을 위해 필드를 만들고 싶다고 생각합니다 ...

당신이 절대적으로 가지다 사용하려면 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();
}

코드를 보면 Warenkorb 생성자에서 "foreach"대신 "for"를 사용하고 있습니다.

움직입니다 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