생성자 내에서 ObjectArray의 물체 필드의 합계?
문제
나는 기사 용으로, 다른 하나는 카트 용으로 두 개의 수업을 가지고 있습니다. 카트에는 객체 배열이 포함되어 있습니다 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;
}