2009-06-01 4 views
1

두 개의 클래스가 있습니다. 하나는 기사 용이고 다른 하나는 장바구니 용입니다. 카트는 article 개의 개체를 포함하는 개체 배열로 구성됩니다.objectarray에있는 객체의 필드 합계, 모두 생성자 내에 있습니까?

나는 생성자 내에서 foreach-loop로 기사의 가격을 합산해야한다. 그 형식이 이중으로 받아 들여지지 않는 것보다 생성자 내에 (아마 잘못된) 메서드를 작성할 때. 어떻게하면 객체 배열 내의 객체 필드를 합산 할 수 있으며 생성자 안에서이 작업을 수행 할 수 있습니까 (< - 잘못된 설계 결정 인 것처럼 보이지만 클래스 작업의 일부 임). 여기

내 클래스입니다 :

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

} 

답변

2

당신은 생성자 내에서 추가 방법을 만들려고하고 있습니다. 그건 좋은 생각이 아니다. 또한 객체에 의해 배열을 인덱싱하려고 시도하는데 이는 효과가 없습니다. 마지막으로 Artikel 대신 을 Object에 전화하려고합니다. 당신은 합이있을 것이다 루프의 말에 지금

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

을 -하지만 당신은 그것으로 무엇을 원하는가이 시도? ,

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

먼저 당신이해야 당신이 절대적으로 이있는 경우 다음 각 반복에 캐스팅한다 대신 Artikel[]Object[]를 사용하는

... 당신이 그것을위한 필드를 만들 생각 배열이 Artikel이 아니라 Object이 아닙니다. Objects으로는 많은 것을 할 수 없습니다.

당신이 artekellisteArtikel[]에 변경 가정, 요약은 다음과 같이 갈 것 :

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을 사용하지 않을 수 있습니다; 동등한 표준에 대한 루프, 당신이 "를"대신 Warenkorb 생성자에서 "foreach는"의 사용하는 코드를 보면

for(int i = 0; i < artikelliste.length; i++) { 
    summe += artikelliste[i].getVerkaufspreis(); 
} 
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; 
} 
관련 문제