# Einkaufsliste erstellen



## aye_CaptainJack (2. Nov 2019)

Hallo ,

wir sollen aktuell im Informatikunterricht eine Einkaufsliste in Java erstellen. Dazu haben wir ein Grundgerüst bekommen, wo wir nur noch für einige Methoden den Quelltext ändern müssen. Des weiteren haben wir eine Artikel Klasse und eine List Klasse. Die List-Klasse hat soweit ich das verstanden habe schon einige Methoden die wir nutzen können. 
Mein Problem ist das ich 1. nicht verstehe warum wir die Methoden aus der List-Klasse benutzen und wir nicht einfach Methoden wie contain (hab ich beim recherchieren gefunden) nutzen. 
Ich habe jetzt schon eine fast fertige Einkaufsliste, nur weiß ich leider nicht ob die Methoden auch so funktionieren wie sie sollen und wie ich das testen kann. Beim compilen kommen auch noch 3 Fehlermeldungen die ich nicht verstehe. 
Vielleicht könnt ihr euch das ja mal anschauen.
Danke schonmal im Voraus.


----------



## mihe7 (2. Nov 2019)

aye_CaptainJack hat gesagt.:


> nicht verstehe warum wir die Methoden aus der List-Klasse benutzen und wir nicht einfach Methoden wie contain (hab ich beim recherchieren gefunden) nutzen.


Könnte es vielleicht daran liegen, dass es Teil der Aufgabe ist, die Methode selbst zu implementieren?



aye_CaptainJack hat gesagt.:


> Beim compilen kommen auch noch 3 Fehlermeldungen die ich nicht verstehe.


Welche denn?



aye_CaptainJack hat gesagt.:


> nur weiß ich leider nicht ob die Methoden auch so funktionieren wie sie sollen und wie ich das testen kann.


So lange Du Deinen Code nicht übersetzen kannst, gar nicht. Ansonsten musst Du halt einfach entsprechende Fälle ausprobieren.


----------



## MoxxiManagarm (4. Nov 2019)

Ich habe nur einmal kurz FK_Einkauf aufgemacht.


```
public class FK_Einkauf extends List {
  // Anfang Attribute
  private List Einkaufsliste;
```

Du solltest dich entscheiden ob Inheritence oder Composition. Composition wird üblicher Weise bevorzugt.


----------



## kneitzel (4. Nov 2019)

Bitte poste den Code in Code tags. Das ist so ja nicht wirklich handhabbar.


```
//eine Schleife die solange ausgeführt wird, bis der Artikel gefunden (dann gefunden = true) wird oder man am Ender der liste angekommen ist(dann hasAccess = false) if (artikel.equals(getContent().getArtikelname()))
 if(current=art){ //es wird überprüft ob der aktuelle Knoten = dem zu löschenden Artikel ist
```
Es scheint so, als ob in dem Kommentar schon etwas drin steht, wie es prinzipiell gehen sollte, aber das wurde dann ersetzt:
a) Es gibt ein riesen Mischmasch, weil Du - wie von @MoxxiManagarm schon geschrieben sowohl Inheritance als auch Composition verwendest. current ist Bestandteil von List und wenn Du das als Variable haben willst, dann musst Du das auf der Variablen nutzen. Aber getContent gibt den aktuellen Wert zurück, daher wäre der Aufruf wohl richtig und notwendig.
b) "=" ist eine Zuweisung. Ein Vergleich wäre "==", aber bei Objekten ist equals zu nutzen!
c) current wäre ein ListNode - art aber ein Artikel. Die sind nicht direkt zu vergleichen (bzw. es wird immer false raus kommen).

Das nur einmal, was mir so auf den ersten Blick so auffällt. Aus meiner Sicht wäre es existenziell, sich erst einmal mit den Basis-Elementen vertraut zu machen, ehe man so komplexe Aufgaben angeht (Wobei die Komplexität immer noch gering ist. Etwas in eine Liste hinein tun oder so sehe ich noch nicht als sonderlich komplex an...). Aber die Grundlagen bezüglich =, == und equals sind absolutes Basiswissen ohne das so Aufgaben nicht angegangen werden können....


----------



## MoxxiManagarm (4. Nov 2019)

Ich finde übrigens bei vorgegebenen Signaturen immer wichtig zu erfahren welcher Code vorgegeben ist und welcher aus deiner Feder stammt. Am Ende machen wir noch Vorschläge für den fixen Code (Profs sind leider viel zu oft auch keine tollen Programmierer)


----------



## temi (4. Nov 2019)

MoxxiManagarm hat gesagt.:


> Ich habe nur einmal kurz FK_Einkauf aufgemacht.
> 
> 
> ```
> ...



Du solltest dir auch angewöhnen Variablennamen mit einem Kleinbuchstaben beginnen zu lassen (sogenannter lowerCamelCase) und Klassen mit einem Großbuchstaben. Das ist gängiger Stil.

In deinem Fall also `private List einkaufsListe;`


----------



## temi (4. Nov 2019)

Um auch auf eine konkrete Frage eine Antwort zu geben:



> Desweiteren habe ich noch nicht verstanden, wieso man teilweise einkaufsliste.toFirst oder this.hasAccess schreibt. Also wozu braucht man das this. und das einkaufsliste.?



toFirst() ist eine Methode der Klasse List<>. Diese Methode kann nur auf eine Instanz der Klasse aufgerufen werden. In deinem Fall heißt die Instanz (die Variable) "einkaufsliste" der Aufruf der Methode funktioniert also mit einkaufsliste.toFirst();

"this" ist eine Referenz auf eine Instanz von sich selbst. In deinem Fall auf eine Instanz von FK_Einkauf:


```
public class Foo {

   int zahl; // eine Instanzvariable namens Zahl

   public Foo(int zahl) { // ein Parameter namens Zahl
      this.zahl = zahl; // der Parameter zahl wird der Instanzvariablen zahl zugewiesen.
   }

   public int getZahl() {
      return this.zahl; // die Instanzvariable zahl wird zurück gegeben.
   }
}
```

Speziell beim Konstruktor im obigen Beispiel muss this verwendet werden, sonst ließe sich der Parameter nicht von der Instanzvariablen unterscheiden.


----------

