Vererbung

Status
Nicht offen für weitere Antworten.

AndreasS

Aktives Mitglied
Hallo,

habe mal wieder ein Problem, an dem ich nicht weiterkomme. Bin halt noch Anfänger in Sachen Java... :(

Die Klasse "Kasse" funktioniert nicht richtig. Habe mal meinen Code gelöscht, um niemand zu verwirren.
Diese Klasse und die Methode bezahlen() sind für die Ausgabe mit verantwortlich.
Leider weiß ich nicht, wie das funktionieren soll...
Hier mal der Code:

Code:
import java.util.*;

public class Supermarkt {

  public static void main(String[] args) {
    Lager aldiLager=new Lager();                            //Anlegen des Lagers

    /* Füllen des Lagers */
    Buch harrypotter1=new Buch("Harry Potter 1",15);
    aldiLager.wareneingang(harrypotter1);

    Buch harrypotter2=new Buch("Harry Potter 2",17);
    aldiLager.wareneingang(harrypotter2);

    Buch harrypotter3=new Buch("Harry Potter 3",19);
    aldiLager.wareneingang(harrypotter3);

    Buch harrypotter4=new Buch("Harry Potter 4",22);
    aldiLager.wareneingang(harrypotter4);

    Buch harrypotter5=new Buch("Harry Potter 5",26);
    aldiLager.wareneingang(harrypotter5);

    Elektronikartikel stereoanlage=new Elektronikartikel("Stereoanlage",199,24);
    aldiLager.wareneingang(stereoanlage);

    Elektronikartikel rasierer=new Elektronikartikel("Rasierer",29.90,36);
    aldiLager.wareneingang(stereoanlage);

    Lebensmittel gurke=new Lebensmittel("Gurke",0.69,"20031201");
    aldiLager.wareneingang(gurke);

    Lebensmittel spaetzle=new Lebensmittel("Schwäbische Spätzle",5.99,"20040101");
    aldiLager.wareneingang(gurke);

    Lebensmittel schinkenwurst=new Lebensmittel("Schinkenwurst",2.99,"20041208");
    aldiLager.wareneingang(schinkenwurst);
    /*********************/

    /* Einkauf 1 */
    Warenkorb meinEinkauf=new Warenkorb();
    meinEinkauf.hineinlegen(schinkenwurst);
    meinEinkauf.hineinlegen(harrypotter1);
    meinEinkauf.hineinlegen(spaetzle);
    meinEinkauf.hineinlegen(rasierer);
    Kasse.bezahlen(meinEinkauf);
    System.out.println("Ende Einkauf 1\n");
    /*************/


    /* Einkauf 2 */
    Warenkorb einAndererEinkauf=new Warenkorb();
    einAndererEinkauf.hineinlegen(harrypotter1);
    einAndererEinkauf.hineinlegen(harrypotter2);
    einAndererEinkauf.hineinlegen(harrypotter3);
    einAndererEinkauf.hineinlegen(harrypotter4);
    einAndererEinkauf.hineinlegen(harrypotter5);
    Kasse.bezahlen(einAndererEinkauf);
    System.out.println("Ende Einkauf 2\n");
    /*************/


    /* Einkauf 3 */
    Warenkorb nochEinEinkauf=new Warenkorb();
    nochEinEinkauf.hineinlegen(stereoanlage);
    nochEinEinkauf.hineinlegen(gurke);
    Kasse.bezahlen(nochEinEinkauf);
    System.out.println("Ende Einkauf 3\n");
    /*************/
  }
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++ HIER IST DAS PROBLEM: +++++++++++++++++++++++++++++++++++++++
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
class Kasse{
}

class Produkt {
	//Variablen
	private String name;
	private double preis, mwst;
	
	//Konstruktor
	Produkt(String name, double preis, double mwst) {
		this.name = name;
		this.preis = preis;
		this.mwst = mwst;
	}
}

class Lebensmittel extends Produkt{
  private String haltbarkeitsdatum;

  public Lebensmittel(String name,double preis,String haltbarkeitsdatum){
    super(name,preis,0.16);

    this.haltbarkeitsdatum=haltbarkeitsdatum;
  }
}

class Elektronikartikel extends Produkt{
  private int garantie;

  public Elektronikartikel(String name,double preis,int garantie){
    super(name,preis,0.16);

    this.garantie=garantie;
  }

  public int getGarantie(){ return(garantie); }
}

class Buch extends Produkt{
  public Buch(String name,double preis){
    super(name,preis,0.07);
  }
}

class Warenkorb {
  private Vector warenkorb=new Vector();

  public void hineinlegen(Produkt prod){ warenkorb.addElement(prod); }
  public void herausholen(Produkt prod){ warenkorb.remove(prod); }
  public int anzahlProdukte(){ return(warenkorb.size()); }
  public Produkt produkt(int i){ return((Produkt)warenkorb.elementAt(i)); }
}

class Lager {
  private Vector lager=new Vector();

  public void wareneingang(Produkt prod){ lager.addElement(prod); }
  public void warenausgang(Produkt prod){ lager.remove(prod); }
}
Ich bekomme immer die Fehlermeldung:
bezahlen() in Kasse cannot be applied to (Warenkorb)

Das Programm sollte folgende Ausgabe realisieren:
Rasierer 29.9 (4.78 MwSt.)
36 Monate Garantie
Schwäbische Spätzle 5.99 (0.96 MwSt.)
Harry Potter 1 15.0 (1.05 MwSt.)
Schinkenwurst 2.99 (0.48 MwSt.)
Summe inkl. MwSt. 61.15
Ende Einkauf 1
Harry Potter 5 26.0 (1.82 MwSt.)
Harry Potter 4 22.0 (1.54 MwSt.)
Harry Potter 3 19.0 (1.33 MwSt.)
Harry Potter 2 17.0 (1.19 MwSt.)
Harry Potter 1 15.0 (1.05 MwSt.)
Summe inkl. MwSt. 105.93
Ende Einkauf 2
Gurke 0.69 (0.11 MwSt.)
Stereoanlage 199.0 (31.84 MwSt.)
24 Monate Garantie
Summe inkl. MwSt. 231.64
Ende Einkauf 3

Es wäre sehr nett, wenn sich mal einer von euch Könnern mein Programm anschauen könnte.
Schon mal vorab danke für jede Hilfe.

Gruß Andreas
 

K-Man

Bekanntes Mitglied
Du rufst bezahlen() direkt von der Klasse Kasse aus. Das geht nur, wenn die Methode static ist...
Also:
Code:
public static void bezahlen()
Ansonsten musst du erst ein Obekt der Klasse Kasse erzeugen, um bezahlen() aufrufen zu können...
 

AndreasS

Aktives Mitglied
Danke für deine Hilfe. Leider bekomme ich immer noch die gleiche Fehlermeldung.
Vielleicht weiß ja noch jemand anderes etwas?
Bin für jede Hilfe dankbar.
Gruß Andreas
 

KSG9|sebastian

Top Contributor
Du hast eine Klasse Produkt, in die Klasse machst du ne Methode "bezahlen()" rein:

Code:
public double bezahlen(){
    return preis;
}

So sollte die aussehen.

Weiter: Objekte aus dem Supermarkt darfst du nicht so erzeugen:
Code:
    Buch b = new Buch(..)

sondern so:

Code:
    Produkt b = new Buch(..)

Desweiteren würde ich an deiner Stelle die Klasse Produkt als 'abstract' deklarieren, da sie nie erzeugt wird.
Wenn du jetzt alles ausrechnen willst, dann brauchst du nur noch deinen Vector durchgehen und jedesmal den Preis holen:

Code:
double preis = 0;
for(int i=0;i<warenkorb.length();i++){
    preis += ((Produkt)warenkorb.get(i)).bezahlen();
}

Ich hoffe mal dass ich dir helfen konnte!
 

Illuvatar

Top Contributor
KSG9|plak hat gesagt.:
Du hast eine Klasse Produkt, in die Klasse machst du ne Methode "bezahlen()" rein:

Code:
public double bezahlen(){
    return preis;
}

So sollte die aussehen.
Mir kommts eher so vor, als brächte er in der Klasse Kasse eine Methode bezahlen, die einen Warenkorb als Argument bekommt.
Schreib in deine Klasse Kasse diese Methode:
Code:
public static void bezahlen (Warenkorb w)
{
  //Warenkorb bezahlen
}

KSG9|plak hat gesagt.:
Weiter: Objekte aus dem Supermarkt darfst du nicht so erzeugen:
Code:
    Buch b = new Buch(..)

sondern so:

Code:
    Produkt b = new Buch(..)
Wieso das denn?


KSG9|plak hat gesagt.:
Desweiteren würde ich an deiner Stelle die Klasse Produkt als 'abstract' deklarieren, da sie nie erzeugt wird.
Wenn du jetzt alles ausrechnen willst, dann brauchst du nur noch deinen Vector durchgehen und jedesmal den Preis holen:

Code:
double preis = 0;
for(int i=0;i<warenkorb.length();i++){
    preis += ((Produkt)warenkorb.get(i)).bezahlen();
}

*zustimm*
 

AndreasS

Aktives Mitglied
Erstmal danke für eure Hilfe! Leider habe ich es bis jetzt noch nicht geschafft, das Programm zum laufen zu bringen.
Vielleicht kann mir ja nochmal jemand helfen!? Wäre echt nett...
Habe mal die Vorschläge umgesetzt, jetzt kennt er aber die Variable warenkorb nich...
Hier mein Code, wie er nun aussieht:
Code:
import java.util.*;

public class Supermarkt {

  public static void main(String[] args) {
    Lager aldiLager=new Lager();                            //Anlegen des Lagers

    /* Füllen des Lagers */
    Buch harrypotter1=new Buch("Harry Potter 1",15);
    aldiLager.wareneingang(harrypotter1);

    Buch harrypotter2=new Buch("Harry Potter 2",17);
    aldiLager.wareneingang(harrypotter2);

    Buch harrypotter3=new Buch("Harry Potter 3",19);
    aldiLager.wareneingang(harrypotter3);

    Buch harrypotter4=new Buch("Harry Potter 4",22);
    aldiLager.wareneingang(harrypotter4);

    Buch harrypotter5=new Buch("Harry Potter 5",26);
    aldiLager.wareneingang(harrypotter5);

    Elektronikartikel stereoanlage=new Elektronikartikel("Stereoanlage",199,24);
    aldiLager.wareneingang(stereoanlage);

    Elektronikartikel rasierer=new Elektronikartikel("Rasierer",29.90,36);
    aldiLager.wareneingang(stereoanlage);

    Lebensmittel gurke=new Lebensmittel("Gurke",0.69,"20031201");
    aldiLager.wareneingang(gurke);

    Lebensmittel spaetzle=new Lebensmittel("Schwäbische Spätzle",5.99,"20040101");
    aldiLager.wareneingang(gurke);

    Lebensmittel schinkenwurst=new Lebensmittel("Schinkenwurst",2.99,"20041208");
    aldiLager.wareneingang(schinkenwurst);
    /*********************/

    /* Einkauf 1 */
    Warenkorb meinEinkauf=new Warenkorb();
    meinEinkauf.hineinlegen(schinkenwurst);
    meinEinkauf.hineinlegen(harrypotter1);
    meinEinkauf.hineinlegen(spaetzle);
    meinEinkauf.hineinlegen(rasierer);
    Kasse.bezahlen(meinEinkauf);
    System.out.println("Ende Einkauf 1\n");
    /*************/


    /* Einkauf 2 */
    Warenkorb einAndererEinkauf=new Warenkorb();
    einAndererEinkauf.hineinlegen(harrypotter1);
    einAndererEinkauf.hineinlegen(harrypotter2);
    einAndererEinkauf.hineinlegen(harrypotter3);
    einAndererEinkauf.hineinlegen(harrypotter4);
    einAndererEinkauf.hineinlegen(harrypotter5);
    Kasse.bezahlen(einAndererEinkauf);
    System.out.println("Ende Einkauf 2\n");
    /*************/


    /* Einkauf 3 */
    Warenkorb nochEinEinkauf=new Warenkorb();
    nochEinEinkauf.hineinlegen(stereoanlage);
    nochEinEinkauf.hineinlegen(gurke);
    Kasse.bezahlen(nochEinEinkauf);
    System.out.println("Ende Einkauf 3\n");
    /*************/
  }
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++
//In diesen beiden Klassen stecken die Probleme...
//+++++++++++++++++++++++++++++++++++++++++++++++++++++
class Kasse{
	public static void bezahlen (Warenkorb w) { 
	double preis = 0; 
	  for(int i=0;i<warenkorb.length();i++){ 
      preis += ((Produkt)warenkorb.get(i)).bezahlen(); 
	  }
  	//Warenkorb bezahlen 
	}
	
}

abstract class Produkt {
	//Variablen
	private String name;
	private double preis, mwst;
	
	//Konstruktor
	Produkt(String name, double preis, double mwst) {
		this.name = name;
		this.preis = preis;
		this.mwst = mwst;
	}
	
	public double bezahlen(){ 
        return preis; 
	}
}

class Lebensmittel extends Produkt{
  private String haltbarkeitsdatum;

  public Lebensmittel(String name,double preis,String haltbarkeitsdatum){
    super(name,preis,0.16);

    this.haltbarkeitsdatum=haltbarkeitsdatum;
  }
}

class Elektronikartikel extends Produkt{
  private int garantie;

  public Elektronikartikel(String name,double preis,int garantie){
    super(name,preis,0.16);

    this.garantie=garantie;
  }

  public int getGarantie(){ return(garantie); }
}

class Buch extends Produkt{
  public Buch(String name,double preis){
    super(name,preis,0.07);
  }
}

class Warenkorb {
  private Vector warenkorb=new Vector();

  public void hineinlegen(Produkt prod){ warenkorb.addElement(prod); }
  public void herausholen(Produkt prod){ warenkorb.remove(prod); }
  public int anzahlProdukte(){ return(warenkorb.size()); }
  public Produkt produkt(int i){ return((Produkt)warenkorb.elementAt(i)); }
}

class Lager {
  private Vector lager=new Vector();

  public void wareneingang(Produkt prod){ lager.addElement(prod); }
  public void warenausgang(Produkt prod){ lager.remove(prod); }
}

Danke für jede Hilfe!

Gruß Andreas
 

Grizzly

Top Contributor
Hi Andreas,

wie ich gerade sehe, bist Du Student in Tübingen. Aber nicht zufällig Informatiker auf dem Sand? :D
 

AndreasS

Aktives Mitglied
Hi,
komme zwar aus Tübingen, aber ich studiere Wirtschaftsinformatik in Albstadt.
Kann ein paar Programmiersprachen ganz gut, aber die Vererbung etc. in Java will nicht in meinen Kopf.
Na ja, man kann alles lernen!
Vielleicht kennst du dich ja aus?!
Gruß Andreas
 

Grizzly

Top Contributor
Hab' mal den Code neu formatiert:
Code:
public class Supermarkt {
	
	public static void main(String[] args) {
		//Anlegen des Lagers
		Lager aldiLager = new Lager();
		
		/* Füllen des Lagers */
		Buch harrypotter1 = new Buch("Harry Potter 1", 15);
		aldiLager.wareneingang(harrypotter1);
		
		Buch harrypotter2 = new Buch("Harry Potter 2", 17);
		aldiLager.wareneingang(harrypotter2);
		
		Buch harrypotter3 = new Buch("Harry Potter 3", 19);
		aldiLager.wareneingang(harrypotter3);
		
		Buch harrypotter4 = new Buch("Harry Potter 4", 22);
		aldiLager.wareneingang(harrypotter4);
		
		Buch harrypotter5=new Buch("Harry Potter 5", 26);
		aldiLager.wareneingang(harrypotter5);
		
		Elektronikartikel stereoanlage = new Elektronikartikel("Stereoanlage", 199, 24);
		aldiLager.wareneingang(stereoanlage);
		
		Elektronikartikel rasierer = new Elektronikartikel("Rasierer", 29.90, 36);
		aldiLager.wareneingang(stereoanlage);
		
		Lebensmittel gurke = new Lebensmittel("Gurke", 0.69, "20031201");
		aldiLager.wareneingang(gurke);
		
		Lebensmittel spaetzle = new Lebensmittel("Schwäbische Spätzle", 5.99, "20040101");
		aldiLager.wareneingang(gurke);
		
		Lebensmittel schinkenwurst = new Lebensmittel("Schinkenwurst", 2.99, "20041208");
		aldiLager.wareneingang(schinkenwurst);
		
		//==========================
		
		/* Einkauf 1 */
		Warenkorb meinEinkauf = new Warenkorb();
		meinEinkauf.hineinlegen(schinkenwurst);
		meinEinkauf.hineinlegen(harrypotter1);
		meinEinkauf.hineinlegen(spaetzle);
		meinEinkauf.hineinlegen(rasierer);
		Kasse.bezahlen(meinEinkauf);
		System.out.println("Ende Einkauf 1\n");
		
		//==========================
		
		/* Einkauf 2 */
		Warenkorb einAndererEinkauf = new Warenkorb();
		einAndererEinkauf.hineinlegen(harrypotter1);
		einAndererEinkauf.hineinlegen(harrypotter2);
		einAndererEinkauf.hineinlegen(harrypotter3);
		einAndererEinkauf.hineinlegen(harrypotter4);
		einAndererEinkauf.hineinlegen(harrypotter5);
		Kasse.bezahlen(einAndererEinkauf);
		System.out.println("Ende Einkauf 2\n");
		
		//==========================
		
		/* Einkauf 3 */
		Warenkorb nochEinEinkauf = new Warenkorb();
		nochEinEinkauf.hineinlegen(stereoanlage);
		nochEinEinkauf.hineinlegen(gurke);
		Kasse.bezahlen(nochEinEinkauf);
		System.out.println("Ende Einkauf 3\n");
	}
}

Code:
public abstract class Produkt {
	// Variablen
	private String name;
	private double preis, mwst;
	
	//Konstruktor
	public Produkt(String name, double preis, double mwst) {
		this.name = name;
		this.preis = preis;
		this.mwst = mwst;
	}
	
	public double bezahlen(){
		return preis;
	}
}

Code:
public class Lebensmittel extends Produkt{
	private String haltbarkeitsdatum;
	
	public Lebensmittel(String name, double preis, String haltbarkeitsdatum) {
		super(name, preis, 0.16);
		this.haltbarkeitsdatum = haltbarkeitsdatum;
	}
}

Code:
public class Elektronikartikel extends Produkt {
	private int garantie;
	
	public Elektronikartikel(String name, double preis, int garantie) {
		super(name, preis, 0.16);
		this.garantie = garantie;
	}
	
	public int getGarantie() {
		return garantie;
	}
}

Code:
public class Buch extends Produkt {
	public Buch(String name, double preis) {
		super(name, preis, 0.07);
	}
}

Code:
import java.util.Vector;

public class Warenkorb {
	private Vector warenkorb = new Vector();
	
	public Warenkorb() {
		super();
	}
	
	public void hineinlegen(Produkt prod) {
		warenkorb.addElement(prod);
	}
	
	public void herausholen(Produkt prod) {
		warenkorb.remove(prod);
	}
	
	public int anzahlProdukte() {
		return warenkorb.size();
	}
	
	public Produkt getProduktAt(int index) {
		return (Produkt) warenkorb.elementAt(index);
	}
}

Code:
import java.util.Vector;

public class Lager {
	private Vector lager = new Vector();
	
	public Lager() {
		super();
	}
	
	public void wareneingang(Produkt prod) {
		lager.addElement(prod);
	}
	
	public void warenausgang(Produkt prod) {
		lager.remove(prod);
	}
}

Code:
public class Kasse{
	public static void bezahlen(Warenkorb w) {
		double preis = 0;
		
		for(int index = 0; index < w.anzahlProdukte(); index++) {
			preis += w.getProduktAt(index).bezahlen();
		}
		//Warenkorb bezahlen
   }
}

Der Fehler lag nämlich in der Klasse Kasse, was ich allerdings nicht ganz verstehe: Du hast der Klasse Warenkorb zwei wunderbare Methode anzahlProdukte und getProduktAt (ehemals produkt). Und dann benutzt Du sie in der Klasse Kasse gar nicht. Stattdessen versuchst Du auf den Warenkorb wie auf ein Objekt der Klasse Vector zuzugreifen. ???:L :wink:
 

AndreasS

Aktives Mitglied
Nochmals danke an alle, die bisher geholfen haben. Leider habe ich immer noch Probleme und komme einfach nicht weiter :( .
Die Ausgabe funktioniert immer noch nicht...
So sollte sie aussehen und von der Klasse Kasse aus realiesiert werden:
Das Programm sollte folgende Ausgabe realisieren:

Rasierer 29.9 (4.78 MwSt.)
36 Monate Garantie
Schwäbische Spätzle 5.99 (0.96 MwSt.)
Harry Potter 1 15.0 (1.05 MwSt.)
Schinkenwurst 2.99 (0.48 MwSt.)
Summe inkl. MwSt. 61.15
Ende Einkauf 1
Harry Potter 5 26.0 (1.82 MwSt.)
Harry Potter 4 22.0 (1.54 MwSt.)
Harry Potter 3 19.0 (1.33 MwSt.)
Harry Potter 2 17.0 (1.19 MwSt.)
Harry Potter 1 15.0 (1.05 MwSt.)
Summe inkl. MwSt. 105.93
Ende Einkauf 2
Gurke 0.69 (0.11 MwSt.)
Stereoanlage 199.0 (31.84 MwSt.)
24 Monate Garantie
Summe inkl. MwSt. 231.64
Ende Einkauf 3

Bei mir wird jedoch nur:
Ende Einkauf 1
Ende Einkauf 2
Ende Einkauf 3
ausgegeben.

Außerdem habe ich noch eine Frage an den letzten Antworter. Ich dachte immer, dass der leere Konstruktor nicht implementiert werden muss, da Java ihn ja selbst erstellt???
Code:
import java.util.Vector; 

public class Lager { 
   private Vector lager = new Vector(); 
// Muss das sein????
   public Lager() { 
      super(); 
   } 
    
   public void wareneingang(Produkt prod) { 
      lager.addElement(prod); 
   } 
    
   public void warenausgang(Produkt prod) { 
      lager.remove(prod); 
   } 
}

Bitte helft mir nochmals.

Danke und Gruß

Andreas
 

Grizzly

Top Contributor
Hi AndreasS,

das weniger ausgegeben wird, als Du gerne hättest, liegt daran, dass Du einfach im Programm nicht mehr ausgibst. Probier einfach mal System.out.println("Text"); an die entsprechenden Stellen im Code zu schreiben. :wink:

Zu Deiner Bemerkung mit dem Konstruktor: Prinzipiel ist es in diesem Fall egal. Ich schreibe ihn halt immer der Vollständigkeit halber hin. :)
 

AndreasS

Aktives Mitglied
wenn ich die Variablen ausgeben will, kommt keine richtige Ausgabe. :(
Vielleicht kannst du mir ja nochmal helfen?
Gruß
Andreas
 

AndreasS

Aktives Mitglied
Hi,
es kommt folgende Ausgabe:
Einkauf 1

Warenkorb@a18aa2
Einkauf 2

Einkauf 3

wenn ich das probiere:
Code:
...
System.out.println(einAndererEinkauf); 
      Kasse.bezahlen(einAndererEinkauf); 
      System.out.println("Ende Einkauf 2\n");

Irgendwie muss ich doch den verfluchten Warenkorb ausgeben können...

Danke für jede Hilfe

Gruß Andreas
 

Grizzly

Top Contributor
Das ist auch klar: Du gibt das Objekt als String aus. Und standardmäßig ist das der Klassenname und eine hexadezimale Zahl.

In diesem Fall musst Du die Methode toString() entsprechend überschreiben. Ein Beispiel:

Code:
public abstract class Produkt {
   // Variablen
   private String name;
   private double preis, mwst;
   
   //Konstruktor
   public Produkt(String name, double preis, double mwst) {
      this.name = name;
      this.preis = preis;
      this.mwst = mwst;
   }
   
   public double bezahlen() {
      return preis;
   }
   
   public String toString() {
      return "Produkt(Name = " + this.name + "; Preis = " + this.preis + "; MwSt = " + this.mwst + ")";
   }
}
 

AndreasS

Aktives Mitglied
Hi,
habe deinen Vorschlag umgesetzt. Leider kommt immer noch die gleiche falsche Ausgabe, wie vorher beschrieben...
Ich bin am Ende, hoffe du hast noch einen Vorschlag...
Gruß Andreas
 

Grizzly

Top Contributor
Wenn Du eine 1:1 Umsetzung Deiner Ausgabe haben willst, musst Du die Ausgabe in die Methode Warenkorb.hineinlegen(Produkt prod); einbauen.

Dazu musst Du die Klassen folgendermaßen anpassen:
Code:
public abstract class Produkt {
	// Variablen
	private String name;
	private double preis, mwst;
	
	//Konstruktor
	public Produkt(String name, double preis, double mwst) {
		this.name = name;
		this.preis = preis;
		this.mwst = mwst;
	}
	
	public String getName() {
		return this.name;
	}
	
	public double getPreis() {
		return this.preis;
	}
	
	public double getMwSt() {
		return this.mwst;
	}
}

P.S.: getPreis() ist besser als bezahlen(), da ansonsten die Abstraktion nicht passt: Das Produkt bezahlt ja nichts.

Code:
public class Kasse{
	public static void bezahlen(Warenkorb w) {
		double preis = 0;
		
		for(int index = 0; index < w.anzahlProdukte(); index++) {
			preis += w.getProduktAt(index).getPreis();
		}
		//Warenkorb bezahlen
   }
}

Code:
import java.util.Vector;

public class Warenkorb {
	private Vector warenkorb = new Vector();
	
	public Warenkorb() {
		super();
	}
	
	public void hineinlegen(Produkt prod) {
		System.out.println(prod.getName() + " " + prod.getPreis() + " (" + prod.getMwSt() + " MwSt.)");
		warenkorb.addElement(prod);
	}
	
	public void herausholen(Produkt prod) {
		warenkorb.remove(prod);
	}
	
	public int anzahlProdukte() {
		return warenkorb.size();
	}
	
	public Produkt getProduktAt(int index) {
		return (Produkt) warenkorb.elementAt(index);
	}
}

Sodele, und damit ich nicht Deine ganzen Hausaufgaben mache (ist nämlich nicht Sinn dieses Forums):

1. Der Warenkorb gibt nun bei jedem Produkt den Namen, den Preis und die Mehrwertsteuer aus. Bei den Subklassen werden jedoch die zusätzlichen Attribute nicht ausgegeben.

2. Die Summe wird momentan beim Bezahlen an der Kasse noch nicht ausgegeben.

Darüber kannst Du Dir ja mal den Kopf zerbrechen... :wink:
 

AndreasS

Aktives Mitglied
Danke für deine super Hilfe!
Habe mal wieder was gelernt. Natürlich werde ich mir jetzt noch ein bischen den Kopf zerbrechen (Summe ausgeben)...
Aber das ist ja auch Sinn der Sache. Sonst lernt man ja nichts. :D
Gruß
Andreas
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben