# Keksdose



## Phantomas (25. Nov 2008)

Hi, wir sollen im Informatik (Einführungskurs) 2 Klassen (keksdose und Keks implementieren und später z.B. Kekse dieser Keksdose hinzufügen. So weit so gut. 
Anbei mal der eigentlich  fertige Code. Bin irgendwie nur mit der Ausgabe nicht einverstanden. Er sagt mir dauernd:

Keks@addbf1
Keks@42e816
Keks@9304b1


Würde mich freuen, wenn ihr mir helfen könnt.

Code


```
class Keksdose{
        final int KAPAZITAET=3;
        int anzahl;
        Keks[] keks;
        Keksdose(){

                keks= new Keks[KAPAZITAET];
                anzahl=0;
        }
        void einfuegen(Keks k){
                keks[anzahl]=k;
                anzahl++;
                System.out.println(k);
        }
        // Kontrolle, ob Keks mit bestimmter Sorte enthalten ist
        boolean enthaelt(String sorte){
                String sor= sorte.toLowerCase();
                boolean enthaelt=false;
                for (int i=0; i<KAPAZITAET; i++){
                        if (sorte.equals(keks[i])||sor.equals(keks[i])){
                                enthaelt=true;
                        }
                }
                System.out.println("Die Kekssorte ist in der Dose enthalten: "+enthaelt);
                return enthaelt;
        }
        void ausgeben(){
                System.out.println(anzahl);
        }
}
```


```
class Keks{
        String sorte;
        Keks(String sort){
                this.sorte=sort;
        }
        void ausgeben(){
                System.out.println(this.sorte);
        }
}
```



```
class TestKeksenew{
        public static void main(String[] args){
                // Erzeugen Sie ein Objekt der Klasse Keksdose der Kapazitaet 3
                // Fuegen Sie drei Kekse zur Keksdose hinzu
                Keksdose kd = new Keksdose();
                Keks k1 = new Keks("Butterkeks");
                Keks k2 = new Keks("Doppelkeks");
                Keks k3 = new Keks("Hartkeks");
                kd.einfuegen(k1);
                kd.einfuegen(k2);
                kd.einfuegen(k3);
                // Geben Sie die Informationen ueber die Keksdose aus.
                System.out.print("Die Dose enthaelt folgende Anzahl an Keksen: ");
                kd.ausgeben();
                System.out.println("\nDiese Sorten sind enthalten: ");
                k1.ausgeben();
                k2.ausgeben();
                k3.ausgeben();
                // Testen Sie ob die Keksdose einen Butterkeks enthaelt. Geben Sie das
                // Resultat auf der Konsole aus.
                // Ausgabe der Kekse
                kd.enthaelt("Butterkeks");
        }
}
```


----------



## SlaterB (25. Nov 2008)

>void einfuegen(Keks k)
>    {
>        keks[anzahl] = k;
>        anzahl++;
>        System.out.println(k);
>    }

was soll denn hier bei
> System.out.println(k);
ausgegeben werden?

Java kann sich doch nicht ausdenken, was du da gerne hättest,
das muss du genau spezifizieren,
entweder rufst du selber k.ausgeben() auf, statt System.out.println(k)

oder du überschreibst die public String toString()-Methode von Keks


----------



## Quaxli (25. Nov 2008)

Das Programm funktioniert doch eigentlich. Meiner Ansicht nach solltest Du nur die Ausgabe, die SlaterB oben angesprochen hat auskommentieren.

Der Rest sieht gut aus


```
Die Dose enthaelt folgende Anzahl an Keksen: Anzahl = 3

Diese Sorten sind enthalten: 
Keks = Butterkeks
Keks = Doppelkeks
Keks = Hartkeks
Die Kekssorte ist in der Dose enthalten: false
```

(Ich hab nur in die println-Anweisung noch'n "Keks = " bzw. "Anzahl = " eingebaut (nur für mich))


----------



## Quaxli (25. Nov 2008)

Hab' gerade noch einen Fehler entdeckt:


```
// Kontrolle, ob Keks mit bestimmter Sorte enthalten ist
	boolean enthaelt(String sorte) {
		String sor = sorte.toLowerCase();
		boolean enthaelt = false;
		for (int i = 0; i < KAPAZITAET; i++) {
			if (sorte.equals(keks[i].sorte) || sor.equals(keks[i].sorte)) {
				enthaelt = true;
				break;
			}
		}
		System.out.println("Die Kekssorte ist in der Dose enthalten: " + enthaelt);
		return enthaelt;
	}
```


Der Vergleich muß auf keks_.sorte laufen, nicht auf keks. Noch besser wäre natürlich eine get-Methode, welche die Sorte als String zurück liefert. Und ein break sobald der boolean true ist, sonst ist er vielleicht in der nächsten Runde wieder false _


----------



## Guest (25. Nov 2008)

Hey vielen Dank für die schnellen Antworten. Bin grad noch unterwegs. Werd mich aber die Tage da noch mal ransetzen.
Merci!
Grüße


----------



## Guest (26. Nov 2008)

so ich habe das nochmal probiert und einen gravierenden fehler bemerkt:
man muss den namen der Keksdose statt "kd" auch auf "keks" setzen und mit dem break und dem keks_.sorte klappt das dann alles

blöd nur, dass die anfänglichen kekse entweder komplett groß oder komplett klein geschrieben werden müssen_


----------

