# Artikelbestand



## Devanther (24. Jul 2017)

Hallo,

Öffnen Sie das Projekt Artikelbestand und vervollständigen Sie die Klasse
*Bestandsverwalter* in dieser und den folgenden Übungen. Der *Bestandsverwalter*
verwendet eine *ArrayList*, um Artikel zu speichern. Seine Methode *neuer Artikel*
führt bereits einen neuen Artikel in die Verwaltung ein, aber die folgenden Methoden
müssen noch vervollständigt werden: *aufnehmen, findeArtikel, alleArtikelAnzeigen*,
und *mengeImBestand.*
Jeder Artikel, der von der Firma verkauft wird, ist durch ein Objekt der Klasse
*Artikel* repräsentiert, das den Namen, die Nummer und den aktuellen Bestand
dieses Artikels im Lager hält. Die Klasse *Artikel *definiert eine Methode *erhoeheBestand*,
mit der der Bestand erhöht werden kann. Die Methode* verkaufeEinen* vermerkt, wenn
ein einzelner Artikel verkauft wurde, in dem der Bestand um 1 reduziert wird.
Die Klasse *Artikel* ist vorgegeben und Sie sollten diese nicht ändern müssen.
Beginnen Sie indem Sie die Methode *alleArtikelAnzeigen *implementieren und
auf diese Weise feststellen, ob Sie über alle Elemente der Sammlung iterieren können.
Geben Sie einfach die Details jedes gelieferten Artikels aus, indem Sie seine
*to-String*-Methode aufrufen.

Langer Text, aber ich vermute die Lösung ist kompakt.
Es ist die 1te von einer Serie von Aufgaben.
Man muss erstmal eine for-each Schleife erstellen, da über die gesamte Sammlung iteriert werden soll? 
Es sollen alle Artikel untersucht werden. Es ist von vorne hin klar, wieviele Artikel es gibt.
Wenn ja, wie schreibe ich so eine for-each Schleife?
Und wie rufe ich von der Klasse Bestandverwalter die to-String Methode von der Klasse Artikel auf?


----------



## Devanther (24. Jul 2017)

Klasse Bestandsverwalter:

```
import java.util.ArrayList;

/**
* Verwalte den Bestand eines Unternehmens.
* Der Bestand ist beschrieben durch einen oder
* mehrere Artikel.
*
* @author (Ihr Name)
* @version (eine Versionsnummer oder ein Datum)
*/
public class Bestandsverwalter
{
    // Das Lager mit den Artikeln
    private ArrayList<Artikel> lager;

    /**
     * Initialisiere den Bestandsverwalter.
     */
    public Bestandsverwalter()
    {
        lager = new ArrayList<Artikel>();
    }

    /**
     * Führe einen neuen Artikel im Lager ein.
     * @param artikel Der Artikel, der neue eingeführt werden soll.
     */
    public void neuerArtikel(Artikel artikel)
    {
        lager.add(artikel);
    }
   
    /**
     * Nimm eine Lieferung eines Artikels in das Lager auf.
     * Erhöhe den Lagerbestand um die angegebene Menge.
     * @param nummer Die Artikelnummer des Artikels.
     * @param menge Die angelieferte Menge.
     */
    public void aufnehmen(int nummer, int menge)
    {
    }
   
    /**
     * Versuche einen Artikel mit der angegebenen Nummer im
     * Bestand zu finden.
     * @param nummer die Nummer des zu findenden Artikels.
     * @return den gefundenen Artikel oder null, falls kein
     *         passender Artikel gefunden wird.
     */
    public Artikel findeArtikel(int nummer)
    {
        return null;
    }
   
    /**
     * Finde einen Artikel mit der angegebenen Nummer und
     * liefere seine aktuelle Menge im Bestand.
     * Wenn die Nummer auf keinen Artikel passt, wird
     * Null zurückgeliefert.
     * @param nummer die Nummer des Artikels.
     * @return die Menge des Artikels im Bestand.
     */
    public int mengeImBestand(int nummer)
    {
        return 0;
    }

    /**
     * Informationen über alle Artikel ausgeben.
     */
    public void alleArtikelAnzeigen()
    {
    }
}
```

Klasse Artikel:

```
/**
* Modelliert Informationen zu einem Artikel, der von
* einer Firma verkauft wird.
*
* @author David J. Barnes und Michael Kölling
* @version 31.07.2011
*/
public class Artikel
{
    // Die Nummer dieses Artikels
    private int nummer;
    // Der Name dieses Artikels
    private String name;
    // Der aktuelle Bestand dieses Artikels im Lager
    private int bestand;

    /**
     * Konstruktor für Objekte der Klasse Artikel.
     * Der Anfangsbestand ist Null.
     * @param nummer Die Artikelnummer des Artikels.
     * @param name Der Name des Artikels.
     */
    public Artikel(int nummer, String name)
    {
        this.nummer = nummer;
        this.name = name;
        bestand = 0;
    }

    /**
     * @return die Artikelnummer.
     */
    public int gibNummer()
    {
        return nummer;
    }

    /**
     * @return den Artikelnamen.
     */
    public String gibName()
    {
        return name;
    }

    /**
     * @return den Bestand im Lager.
     */
    public int gibBestand()
    {
        return bestand;
    }

    /**
     * @return die Nummer, den Namen und den Lagerbestand als String.
     */
    public String toString()
    {
        return nummer + ": " +
               name +
               " Lagerbestand: " + bestand;
    }

    /**
     * Erhöhe den Lagerbestand dieses Artikels um den
     * angegebenen Wert.
     * @param anzahl Die Anzahl der zusätzlichen Artikel.
     *               Dieser Wert muss größer als Null sein.
     */
    public void erhoeheBestand(int anzahl)
    {
        if(anzahl > 0) {
            bestand += anzahl;
        }
        else {
            System.out.println("Versuchte Aufstockung von " +
                               name +
                               " um einen negativen Wert: " +
                               anzahl);
        }
    }

    /**
     * Verkaufe einen dieser Artikel.
     * Ein Fehler wird gemeldet, wenn der Artikel nicht auf
     * Lager ist.
     */
    public void verkaufeEinen()
    {
        if(bestand > 0) {
            bestand--;
        }
        else {
            System.out.println(
                "Versuchter Verkauf eines nicht vorrätigen Artikels: " + name);
        }
    }
}
```


----------



## thet1983 (24. Jul 2017)

genau mit einer for each iterierst du.


Devanther hat gesagt.:


> Es ist von vorne hin klar, wieviele Artikel es gibt.


warum sollte das klar sein?



Devanther hat gesagt.:


> Wenn ja, wie schreibe ich so eine for-each Schleife?




```
for(MeineKlasse mk : MeineListe)
{
    // Aufruf der toString()
    String out = mk.toString();
}
```


----------



## Devanther (24. Jul 2017)

```
/**
     * Informationen über alle Artikel ausgeben.
     */
    public void alleArtikelAnzeigen()
   
    {  
        for(Bestandsverwalter bw :  new ArrayList<Artikel>()
    {
        // Aufruf der toString()
        String out = Artikel.toString();
    }
}
 
}
```

Ist das so richtig? Es kommt bei den geschweiften Klammern unten eine Fehlermeldung.


----------



## thet1983 (24. Jul 2017)

was sagt deine IDE dazu?
wird nicht funktionieren, alles Rot ( je nach IDE ) oder?

überleg mal...du willst alle Artikel ausgeben und
du hast eine Liste die nennt sich lager

also ergibt sich folgende Methode ( für dich nicht passende , du sollst ja auch was machen, Methode) 


```
public void alleArtikelAnzeigen()
{
   for(MeinArtikel artikel : MeineLagerListeMitAllenArtikeln)
   {
       String ausgabe = artikel.toString();
       System.out.println(ausgabe);
   }
}
```


----------



## Devanther (24. Jul 2017)

```
public void alleArtikelAnzeigen()
   
    {
   for(MeinLager lager :  ArrayList<Artikel>())
       String ausgabe = artikel.toString();
       System.out.println(ausgabe);
   }
}
}
```

Es kommen wieder Fehlermeldungen.


----------



## thecain (24. Jul 2017)

Dann les dich mal dein Buch durch. Seit Tagen werden dir Grundlagen vorgekaut. Du hättest mehr davon wenn du es selber erarbeiten würdest


----------



## thet1983 (24. Jul 2017)

nicht dein ernst oder???

1. schau mal deine Klammerung an....
2. Prüfe ob die Klasse MainLager existiert.

was willst du auslesen? 
--> Artikel 
wo sind deine Artikel gespeichert?
--> in deiner ArrayList<Artikel>  lager

jetzt schau dir noch mal meinen letzten post an...


----------



## Devanther (24. Jul 2017)

public void alleDateienAusgeben()
{
          for(String dateiname : dateien) {
             System.out.println(dateiname);
    }
}

Das steht im Buch^^


```
public void alleArtikelAnzeigen()
{
   for(String artikel : lager)
   {
       String ausgabe = artikel.toString();
       System.out.println(ausgabe);
   }
}
}
```

bei lager kommt noch ne Fehlermeldung


----------



## Harry Kane (24. Jul 2017)

Die Fehlermeldung kommt daher, weil lager keine Strings enthält, sondern Artikel.

```
for(Artikel aktuellerArtikel: lager){
    System.out.println(aktuellerArtikel.toString());
}
```
[edit] Ich sags zwar nicht gerne, aber allmählich erwacht meine Neugier auf das Buch (es geht doch immer noch um das BlueJ Buch?). Kann es sein, dass es didaktisch wirklich so schlecht ist?


----------



## JStein52 (24. Jul 2017)

Eigentlich sind es immer die gleichen Aufgabenstellungen. Letztes Mal war es Verein und Mitgliedschaft, jetzt ist es Bestandsverwalter und Artikel. Der Rest ist ziemlich identisch (bzw. die Methode sind halt sinngemäss auf Bestandsverwalter angepasst) und du solltest dir jetzt mal anschauen wie habe ich es beim Verein gemacht und versuchen es auf diese Aufgabe zu übertragen. Denn wenn du aus den vorhergehenden Aufgaben nichts lernst kannst du es gleich sein lassen.


----------



## Devanther (25. Jul 2017)

So nächste Aufgabe:
Implementieren Sie die Methode *findeArtikel*. Diese sollte die Artikelsammlung nach einem 
Artikel mit passender Nummer durchsuchen . Wenn ein passender Artikel gefunden wird, sollte er als
Ergebnis des Aufrufs zurückgeliefert werden. Wenn kein Artikel gefunden werden kann, wird
null geliefert.
Die Methode unterscheidet sich von *alleArtikelAnzeigen *dadurch, dass nicht notwendigerweise alle Elemente
der Sammlung durchsucht werden müssen, bevor ein Artikel gefunden wird. Wenn die
Artikelnummer beispielsweise gleich auf den ersten Artikel in der Sammlung passt, dann kann
die Iteration abgebrochen und der Artikel geliefert werden. Andererseits kann es passieren, dass die
gesuchte  Artikelnummer gar nicht bekannt ist.
In diesem Fall wird die gesamte Sammlung untersucht, ohne dass ein Artikel gefunden wird.
Dann sollte *null* geliefert werden.
Wenn Sie nach einem passenden Artikel suchen, werden Sie die Methode *gibNummer*
auf einem Artikel aufrufen müssen.


----------



## Devanther (25. Jul 2017)

Klasse Bestandsverwalter bis jetzt:


```
import java.util.ArrayList;

/**
* Verwalte den Bestand eines Unternehmens.
* Der Bestand ist beschrieben durch einen oder
* mehrere Artikel.
*
* @author (Ihr Name)
* @version (eine Versionsnummer oder ein Datum)
*/
public class Bestandsverwalter
{
    // Das Lager mit den Artikeln
    private ArrayList<Artikel> lager;

    /**
     * Initialisiere den Bestandsverwalter.
     */
    public Bestandsverwalter()
    {
        lager = new ArrayList<Artikel>();
    }

    /**
     * Führe einen neuen Artikel im Lager ein.
     * @param artikel Der Artikel, der neue eingeführt werden soll.
     */
    public void neuerArtikel(Artikel artikel)
    {
        lager.add(artikel);
    }
   
    /**
     * Nimm eine Lieferung eines Artikels in das Lager auf.
     * Erhöhe den Lagerbestand um die angegebene Menge.
     * @param nummer Die Artikelnummer des Artikels.
     * @param menge Die angelieferte Menge.
     */
    public void aufnehmen(int nummer, int menge)
    {
    }
   
    /**
     * Versuche einen Artikel mit der angegebenen Nummer im
     * Bestand zu finden.
     * @param nummer die Nummer des zu findenden Artikels.
     * @return den gefundenen Artikel oder null, falls kein
     *         passender Artikel gefunden wird.
     */
    public Artikel findeArtikel(int nummer)
    {
        return null;
    }
   
    /**
     * Finde einen Artikel mit der angegebenen Nummer und
     * liefere seine aktuelle Menge im Bestand.
     * Wenn die Nummer auf keinen Artikel passt, wird
     * Null zurückgeliefert.
     * @param nummer die Nummer des Artikels.
     * @return die Menge des Artikels im Bestand.
     */
    public int mengeImBestand(int nummer)
    {
        return 0;
    }

    /**
     * Informationen über alle Artikel ausgeben.
     */
    public void alleArtikelAnzeigen()
{
   for(Artikel aktuellerArtikel: lager){
    System.out.println(aktuellerArtikel.toString());
}
}
}
```

Klasse Artikel:

```
/**
* Modelliert Informationen zu einem Artikel, der von
* einer Firma verkauft wird.
*
* @author David J. Barnes und Michael Kölling
* @version 31.07.2011
*/
public class Artikel
{
    // Die Nummer dieses Artikels
    private int nummer;
    // Der Name dieses Artikels
    private String name;
    // Der aktuelle Bestand dieses Artikels im Lager
    private int bestand;

    /**
     * Konstruktor für Objekte der Klasse Artikel.
     * Der Anfangsbestand ist Null.
     * @param nummer Die Artikelnummer des Artikels.
     * @param name Der Name des Artikels.
     */
    public Artikel(int nummer, String name)
    {
        this.nummer = nummer;
        this.name = name;
        bestand = 0;
    }

    /**
     * @return die Artikelnummer.
     */
    public int gibNummer()
    {
        return nummer;
    }

    /**
     * @return den Artikelnamen.
     */
    public String gibName()
    {
        return name;
    }

    /**
     * @return den Bestand im Lager.
     */
    public int gibBestand()
    {
        return bestand;
    }

    /**
     * @return die Nummer, den Namen und den Lagerbestand als String.
     */
    public String toString()
    {
        return nummer + ": " +
               name +
               " Lagerbestand: " + bestand;
    }

    /**
     * Erhöhe den Lagerbestand dieses Artikels um den
     * angegebenen Wert.
     * @param anzahl Die Anzahl der zusätzlichen Artikel.
     *               Dieser Wert muss größer als Null sein.
     */
    public void erhoeheBestand(int anzahl)
    {
        if(anzahl > 0) {
            bestand += anzahl;
        }
        else {
            System.out.println("Versuchte Aufstockung von " +
                               name +
                               " um einen negativen Wert: " +
                               anzahl);
        }
    }

    /**
     * Verkaufe einen dieser Artikel.
     * Ein Fehler wird gemeldet, wenn der Artikel nicht auf
     * Lager ist.
     */
    public void verkaufeEinen()
    {
        if(bestand > 0) {
            bestand--;
        }
        else {
            System.out.println(
                "Versuchter Verkauf eines nicht vorrätigen Artikels: " + name);
        }
    }
}
```

Da nicht notwendigerweise alle Elemente durchsucht werden müssen, wird eine
while-Schleife benötigt. Jetzt müsste ich nur noch wissen, wie ich so eine while Schleife schreiben kann.
Wie rufe ich von Bestandsverwalter die Methode gibNummer der Klasse Artikel auf?
(ich weiss, ein ähnliches Problem gab es schonmal)


----------



## Harry Kane (25. Jul 2017)

Kann @JStein52 nur zustimmen. Du bist nicht imstande, gelerntes (bzw.vorgekautes) auf sehr ähnliche Problemstellungen zu übertragen. Wie alt bist du?


----------



## JStein52 (25. Jul 2017)

Devanther hat gesagt.:


> Da nicht notwendigerweise alle Elemente durchsucht werden müssen, wird eine while-Schleife benötigt.


Warum ? Du kannst auch hier die for-each Schleife verwenden. Und wenn du in der Schleife den passenden Artikel gefunden hast machst du return aktuellerArtikel; und hinter der Schleife (d.h. wenn nichts gefunden wurde machst du return null;


----------



## JStein52 (25. Jul 2017)

Devanther hat gesagt.:


> ich weiss, ein ähnliches Problem gab es schonmal


Jaaaa, bei der Vereinsverwaltung und den Mitgliedschaften. Dann guck mal wie du es dort gemacht hast


----------



## Devanther (26. Jul 2017)

1. Es müssen Artikel eingetragen werden
So wie bei der letzen Aufgabe:

```
public Verein()
    {
        meineMitglieder = new ArrayList<>();
       meineMitglieder.add(new Mitglied("Aaliyah", 8, 2017));
       meineMitglieder.add(new Mitglied("Ada", 2, 2015));
       meineMitglieder.add(new Mitglied("Adele", 4, 2016));
       meineMitglieder.add(new Mitglied("Adelina", 12, 2016));
       // weitere...
    }
```
public Bestandsverwalter()
    {
        lager = new ArrayList<Artikel>();
        lager.add(new
    }
weiter weiss ich nicht


2.
So wird nach einer Zeichenkette gesucht, doch wie nach einer Zahl/Nummer?

```
public void bestimmteDateienAusgeben(String aljoscha)
    {
        for(String dateiname : dateien) {
            if(dateiname.contains(aljoscha)) {
                //Treffer
                System.out.println(dateiname);
            }
        }
    }
```

Weiter weiss ich nicht, das mit null hab ich nicht verstanden.

btw: ich bin 28 Jahre alt



> Wenn ein passender Artikel gefunden wird, sollte er als
> Ergebnis des Aufrufs zurückgeliefert werden



Keine Ahnung, wie ich es hier machen soll.


----------



## Devanther (26. Jul 2017)

> Wenn ein passender Artikel gefunden wird, sollte er als
> Ergebnis des Aufrufs zurückgeliefert werden



Mit der return Anweisung, aber wie genau, leider keine Ahnung.


----------



## Harry Kane (26. Jul 2017)

Devanther hat gesagt.:


> (ich weiss, ein ähnliches Problem gab es schonmal)


Jep, und zwar bei der Methode beigetretenInMonat der Verein-Klasse aus deinem  letzten Thread.
In beiden Fällen geht es im Kern darum, Objekte in einer Liste auf eine bestimmte Eigenschaft zu überprüfen.
Bei dem früheren Problem ging es darum, eine Liste mit allen passenden Objekten zu erstellen und zurückzugeben, jetzt geht es darum, das erste passende Objekt zurückzugeben, oder, wenn keines passt, eben null.
Ob du mit einer for- oder mit einer while-Schleife die Objekte aus der Liste holst (oder um es professioneller auszudrücken: über die Liste iterierst), und ob du die Eigenschaft über einen getter aus dem Objekt holst, oder wie im Code von @DerWissende, die Eigenschaft als public Variable implementierst, macht für das Verstehen (und darum geht es ja hier) keinen großen Unterschied.


Devanther hat gesagt.:


> ich bin 28 Jahre alt


Darf ich fragen, wie dein fachlicher Hintergrund ist? In einem früheren Thread hast du erwähnt, dass du "ne Ausbildung zum FIAE machen und dann Wirtschaftsinformatik studieren" willst. Was hast du bisher gemacht? Hast du in irgendeiner Form einen technischen/naturwissenschaftlichem Hintergrund?


----------



## Devanther (26. Jul 2017)

@Harry Kane
Also ich habe eine Ausbildung zum Bankkaufmann gemacht und in diesem Bereich gearbeitet.
Aber ich habe gemerkt, dass mich (Wirtschafts)-Informatik mehr interessiert.
Deswegen will ich jetzt den FIAE machen. Und ja, ich interessiere mich halt,
wie man mit Programmierung, Probleme lösen kann.

Es wäre gut, wenn man mir bei der Aufgabe etwas helfen könnte.
Wie suche ich nach einem Artikel mit passender Nummer?
Ich kann mir den Code nicht vorstellen.

https://www.amazon.de/gp/product/38...6-716c-46d8-9bbd-15ecf21dce39&pf_rd_i=desktop

https://www.amazon.de/Einführung-Ja...1501090278&sr=1-1&keywords=einführung+in+java

Ich schau mir die Bücher nochmal an.
Aber die Gedanken in Code umzusetzen, finde ich echt schwer.


----------



## JStein52 (26. Jul 2017)

```
/**
     * Versuche einen Artikel mit der angegebenen Nummer im
     * Bestand zu finden.
     * @param nummer die Nummer des zu findenden Artikels.
     * @return den gefundenen Artikel oder null, falls kein
     *         passender Artikel gefunden wird.
     */
    public Artikel findeArtikel(int nummer)
    {
         for(Artikel aktuellerArtikel: lager){
              // mache was mit aktuellerArtikel
         }
        return null;
    }
```
Das wäre schon mal eine Schleife über alle Artikel


----------



## Harry Kane (26. Jul 2017)

Devanther hat gesagt.:


> Wie suche ich nach einem Artikel mit passender Nummer?


- Über die Liste mit den Artikeln iterieren
- Die Artikelnummer (ein int) mit dem an die Methode übergebenen int Wert vergleichen.
- Falls die beiden ints übereinstimmen, den Artikel zurückgeben.
- Falls kein Artikel mit der passenden Artikelnummer gefunden wurde: return null.


Devanther hat gesagt.:


> Ich schau mir die Bücher nochmal an.


Schaue dir schwerpunktmäßig die Themen "Rückgabewerte von Methoden" an. Falls die Bücher einigermassen brauchbar sind, müsste auch erklärt werden, und welchen Umständen man bei einer Methode, die ein Objekt zurückgibt, null zurückgibt.


----------



## JStein52 (26. Jul 2017)

Und bei der Klasse Artikel gibt es jetzt die Methode "gibNummer()" die zu jedem Artikel dessen Nummer zurückgibt. Und diese vergleichst du mit der Nummer die du suchst:

```
/**
     * Versuche einen Artikel mit der angegebenen Nummer im
     * Bestand zu finden.
     * @param nummer die Nummer des zu findenden Artikels.
     * @return den gefundenen Artikel oder null, falls kein
     *         passender Artikel gefunden wird.
     */
    public Artikel findeArtikel(int nummer)
    {
         for(Artikel aktuellerArtikel: lager){
              if (aktuellerArtikel.gibNummer() == nummer) {
                 return aktuellerArtikel;
              }
         }
        return null;
    }
```

Edit:  Uups, da haben wir uns überkreuzt


----------



## Xyz1 (26. Jul 2017)

Harry Kane hat gesagt.:


> und ob du die Eigenschaft über einen getter aus dem Objekt holst, oder wie im Code von @DerWissende, die Eigenschaft als public Variable implementierst, macht für das Verstehen (und darum geht es ja hier) keinen großen Unterschied.


Endlich bekomme ich mal RECHT!!!!


----------



## Harry Kane (27. Jul 2017)

DerWissende hat gesagt.:


> Endlich bekomme ich mal RECHT!!!!


Nein. Zur Klärung hier die Langfassung meines obigen Beitrags:
Die Vorgehensweise (Iteration über eine Collection von Objekten, Überprüfung der Objekte auf Eigenschaften, anhand der Prüfung entscheiden, was weiter gemacht werden soll: Objekt zurückgeben, in Liste aufnehmen, Eigenschaften per Sysout ausgeben, jemandem eine freudige mail schreiben mit dem Betreff "Objekt gefunden!", etc. ) funktioniert unabhängig davon, ob die Eigenschaften, so wie es sich gehört über einen setter beschafft werden (wie Artikel.gibNummer(), oder wie bei Mitgliedschaft.gibMonat() aus dem anderen Thread), oder ob sie als package private Variablen implementiert sind (wie die Variablen aus der Mitglied-Klasse vom Wissenden).
Wer aber nicht nur für-den-Moment-funktionierenden, sondern auch sauberen Code haben will, ignoriert die Variante mit den package private Variablen besser.


----------



## Devanther (30. Jul 2017)

So, ich habe jetzt etwas im Buch von Java von Kopf bis Fuß gelesen und mir die letzen Aufgaben hier angesehen.
Das ist jetzt die vorletze Aufgabe von Artikelbestand:

Implementieren Sie die Methode *mengeImBestand*. Diese sollte einen Artikel mit passender Nummer in
der Sammlung finden und die aktuell vorhandene  Menge als Methodenergebnis zurückliefern. Wenn
kein Artikel mit passender Nummer gefunden wird, soll null geliefert werden. Dies ist relativ einfach zu implementieren, sobald die Methode *findeArtikel* zur Verfügung steht. *mengeImBestand* könnte
beispielsweise* findeArtikel* für die Suche verwenden und dann auf dem Ergebnis die Methode *gibBestand*
aufrufen. Beachten Sie aber den Fall, wenn kein Artikel gefunden werden kann.

*findeArtikel *haben wir schon. Wie kann *mengeImBestand,* die Methode
*findeArtikel* für die Suche verwenden? Und wenn man dann das Ergebnis hat,
einfach von dem Objekt Artikel seine *gibBestand* Methode aufrufen.


----------



## Devanther (30. Jul 2017)

Klasse Bestandsverwalter:

```
import java.util.ArrayList;

/**
* Verwalte den Bestand eines Unternehmens.
* Der Bestand ist beschrieben durch einen oder
* mehrere Artikel.
*
* @author (Ihr Name)
* @version (eine Versionsnummer oder ein Datum)
*/
public class Bestandsverwalter
{
    // Das Lager mit den Artikeln
    private ArrayList<Artikel> lager;

    /**
     * Initialisiere den Bestandsverwalter.
     */
    public Bestandsverwalter()
    {
        lager = new ArrayList<Artikel>();
       
    }

    /**
     * Führe einen neuen Artikel im Lager ein.
     * @param artikel Der Artikel, der neue eingeführt werden soll.
     */
    public void neuerArtikel(Artikel artikel)
    {
        lager.add(artikel);
    }
   
    /**
     * Nimm eine Lieferung eines Artikels in das Lager auf.
     * Erhöhe den Lagerbestand um die angegebene Menge.
     * @param nummer Die Artikelnummer des Artikels.
     * @param menge Die angelieferte Menge.
     */
    public void aufnehmen(int nummer, int menge)
    {
    }
   
    /**
     * Versuche einen Artikel mit der angegebenen Nummer im
     * Bestand zu finden.
     * @param nummer die Nummer des zu findenden Artikels.
     * @return den gefundenen Artikel oder null, falls kein
     *         passender Artikel gefunden wird.
     */
     public Artikel findeArtikel(int nummer)
    {
         for(Artikel aktuellerArtikel: lager){
              if (aktuellerArtikel.gibNummer() == nummer) {
                 return aktuellerArtikel;
              }
         }
        return null;
    }
   
    /**
     * Finde einen Artikel mit der angegebenen Nummer und
     * liefere seine aktuelle Menge im Bestand.
     * Wenn die Nummer auf keinen Artikel passt, wird
     * Null zurückgeliefert.
     * @param nummer die Nummer des Artikels.
     * @return die Menge des Artikels im Bestand.
     */
    public int mengeImBestand(int nummer)
    {
        return 0;
    }

    /**
     * Informationen über alle Artikel ausgeben.
     */
    public void alleArtikelAnzeigen()
{
   for(Artikel aktuellerArtikel: lager){
    System.out.println(aktuellerArtikel.toString());
}
}
}
```

Klasse Artikel:

```
/**
* Modelliert Informationen zu einem Artikel, der von
* einer Firma verkauft wird.
*
* @author David J. Barnes und Michael Kölling
* @version 31.07.2011
*/
public class Artikel
{
    // Die Nummer dieses Artikels
    private int nummer;
    // Der Name dieses Artikels
    private String name;
    // Der aktuelle Bestand dieses Artikels im Lager
    private int bestand;

    /**
     * Konstruktor für Objekte der Klasse Artikel.
     * Der Anfangsbestand ist Null.
     * @param nummer Die Artikelnummer des Artikels.
     * @param name Der Name des Artikels.
     */
    public Artikel(int nummer, String name)
    {
        this.nummer = nummer;
        this.name = name;
        bestand = 0;
    }

    /**
     * @return die Artikelnummer.
     */
    public int gibNummer()
    {
        return nummer;
    }

    /**
     * @return den Artikelnamen.
     */
    public String gibName()
    {
        return name;
    }

    /**
     * @return den Bestand im Lager.
     */
    public int gibBestand()
    {
        return bestand;
    }

    /**
     * @return die Nummer, den Namen und den Lagerbestand als String.
     */
    public String toString()
    {
        return nummer + ": " +
               name +
               " Lagerbestand: " + bestand;
    }

    /**
     * Erhöhe den Lagerbestand dieses Artikels um den
     * angegebenen Wert.
     * @param anzahl Die Anzahl der zusätzlichen Artikel.
     *               Dieser Wert muss größer als Null sein.
     */
    public void erhoeheBestand(int anzahl)
    {
        if(anzahl > 0) {
            bestand += anzahl;
        }
        else {
            System.out.println("Versuchte Aufstockung von " +
                               name +
                               " um einen negativen Wert: " +
                               anzahl);
        }
    }

    /**
     * Verkaufe einen dieser Artikel.
     * Ein Fehler wird gemeldet, wenn der Artikel nicht auf
     * Lager ist.
     */
    public void verkaufeEinen()
    {
        if(bestand > 0) {
            bestand--;
        }
        else {
            System.out.println(
                "Versuchter Verkauf eines nicht vorrätigen Artikels: " + name);
        }
    }
}
```


----------



## Harry Kane (30. Jul 2017)

Hast du wirklich keinerlei Idee, wie man an die Aufgabe rangehen könnte? Und ist ein Teil der Frage bzw. Aufgabenstellung von dir selber formuliert oder ist alles irgendwo abgeschrieben?


----------



## Devanther (30. Jul 2017)

Das ist eine Aufgabe aus dem Java lernen mit BlueJ Buch.


```
public int mengeImBestand(int nummer)
    {
       {
         for(Artikel aktuellerArtikel: lager){
              if (aktuellerArtikel.gibBestand() == nummer) {
                 return aktuellerArtikel;
              }
         }
        return null;
    }
    }
```

Total falsch, mein Vorschlag!


----------



## tommysenf (30. Jul 2017)

```
public int mengeImBestand(int nummer)
{
       ___   ___  = ______ ( ___ );
       return 0;     
}
```

Ich würde vorschlagen, dass du erst mal, wie in der Aufgabe schon beschrieben, die Methode finde Artikel aufrufst...


----------



## Devanther (30. Jul 2017)

puh, keine Ahnung wie das nochmal geht.


----------



## tommysenf (30. Jul 2017)

Dann zurück mit der Nase ins Buch: Kapitel über Methoden und Funktionen


----------



## Devanther (30. Jul 2017)

hm. finde das jetzt nicht im Buch.
Noch ein weiterer Tipp?


----------



## tommysenf (30. Jul 2017)

http://www.highscore.de/java/einfuehrung/funktionen.html#funktionen_methodenaufruf


----------



## Devanther (30. Jul 2017)

Ich bekomm ich nicht hin -.- *schähm*


----------



## tommysenf (30. Jul 2017)

Dann hilft nur so lange in die Bücher schauen bis du weißt wie man eine Methode aufruft...


----------



## Devanther (30. Jul 2017)

Ärgerlich! Ich steh auf dem Schlauch!
Eigentlich weiss ich das!


----------



## Harry Kane (30. Jul 2017)

Devanther hat gesagt.:


> Total falsch, mein Vorschlag!


Jep. Du hast den Sinn der Methode überhaupt nicht verstanden. Die nummer, die an mengeImBestand übergeben wird, ist eine Artikelnummer. Du suchst also nach einem Artikel, dessen Bestand der angegebenen Artikelnummer entspricht. Das wäre ungefähr so, als würdest du ein Auto suchen, dessen Laufleistung mit einem angebenen Preis übereinstimmt. Eine Artikelnummer ist eine Eigenschaft eines Artikels, der Bestand eine andere. Mir ist auch nicht klar, was man da noch groß "erklären" soll.
Ausserdem hast du einen Satz geschweifter Klammen zu viel, deswegen gehen ich mal davon aus, dass du auch was die reine Syntax angeht, noch Schwierigkeiten hast.
Was hältst du vom folgenden Vorschlag (Hinweis: ohne Gewähr auf Richtigkeit)

```
public int mengeImBestand(int nummer){
        Artikel a = findeArtikel(nummer);
        if(a != null){
            return a.gibNummer();
        }
        return 0;
    }
```


----------



## JStein52 (30. Jul 2017)

Harry Kane hat gesagt.:


> *return* a.gibNummer();




```
return a.gibBestand();
```
wäre besser oder sollte das ein Test für ihn sein


----------



## Devanther (30. Jul 2017)

Danke!

Aber muss a nicht mit int nummer (Eingabe) verglichen werden, anstatt mit null?

Wenn ich eine Instanz von Bestandsverwalter erstelle und Instanzen von
Artikel. Und dem Artikel die Nummer 4000 zuweise und dann in
Bestandsverwalter mit der Methode mengeImBestand nach 4000 suche, wird
0 statt 4000 zurückgeliefert.


----------



## JStein52 (30. Jul 2017)

nein, null heisst es gibt keinen Artikel mit dieser Nummer


----------



## Harry Kane (30. Jul 2017)

JStein52 hat gesagt.:


> wäre besser oder sollte das ein Test für ihn sein


Boah ej. Ich habe etliche Minuten überlegt, wie ich den TE bis kurz vor die Lösung führen, aber gleichzeitig auf den letzten Metern eine Hürde einbauen kann. Ich war ziemlich happy mit der "Lösung", und jetzt machst du alles kaputt. *schmoll* ;-)


Devanther hat gesagt.:


> Aber muss a nicht mit int nummer verglichen werden, anstatt mit null?


Nein. Du kannst einen Artikel nicht mit einer Nummer vergleichen. Und der "Vergleich" ist kein Vergleich, sondern nur ein Test, ob die Methode findeImBestand einen passenden Artikel gefunden hat oder nicht.


----------



## JStein52 (30. Jul 2017)

Devanther hat gesagt.:


> wird
> 0 statt 4000 zurückgeliefert.


4000 ist ja auch die Artikelnummer und nicht die Anzahl im Bestand. Die ist vermutlich 0 !!!!!!


----------



## Devanther (30. Jul 2017)

Ja, stimmt, ihr habt mit allem Recht^^


----------



## Devanther (30. Jul 2017)

Die letze Aufgabe zu Artikelbestand:

Implementieren Sie die Methode *aufnehmen* nach einem ähnlichen Muster wie bei
*mengeInBestand.* Sie sollte den Artikel mit der gegebenen Nummer finden und dann auf
diesem die Methode *erhoeheBestand* aufrufen.


```
public void aufnehmen(int nummer, int menge)
    {
        Artikel a = findeArtikel(nummer);
        if(a != null){
            return a.erhoeheBestand();
        }
        return 0;
    }
```

Warum geht das nicht?
Was ist der Unterschied zwischen diesen beiden Aufgaben?


----------



## Harry Kane (31. Jul 2017)

Devanther hat gesagt.:


> Was ist der Unterschied zwischen diesen beiden Aufgaben


Die aufnehmen()-Methode  gibt nichts zurück, und a.erhoeheBestand() auch nicht. Deine IDE oder spätestens der Compiler sollte dich darauf mit einer verständlichen Fehlermeldung hinweisen.
Bin ehrlich gesagt etwas erschrocken. Reicht dein bisheriges Verständnis von Java tatsächlich nur dazu, aus *a.gibBestand()* *a.erhoeheBestand()* zu machen, ohne die geänderten Rückgabewerte zu beachten?
Ich habe allmählich das Gefühl, dass es dir entweder an Begabung oder an Ehrgeiz mangelt.


----------



## Devanther (31. Jul 2017)

> Die aufnehmen()-Methode gibt nichts zurück, und a.erhoeheBestand() auch nicht.



Ja, selbstverständlich!

Wie verbessere ich das mit den Rückgabewerten?
Ich muss die Methode *a.erhoeheBestand()*  aufrufen ohne die return
Anweisung zu benutzen.


----------



## JStein52 (31. Jul 2017)

```
public void aufnehmen(int nummer, int menge)
    {
        Artikel a = findeArtikel(nummer);
        if(a != null){
            a.erhoeheBestand(menge);
        }
    }
```


----------



## Devanther (31. Jul 2017)

Easy, danke!

Zusatzaufgabe:
Implementieren Sie eine Methode im* Bestandsverwalter*, die die Details aller Artikel ausgibt, deren Bestand
unter einen bestimmten Level gesunken ist (der als Parameter an die Methode übergeben wird)

Wie gehe ich an so eine Aufgabe heran?


----------



## JStein52 (31. Jul 2017)

Devanther hat gesagt.:


> die Details aller Artikel


Das sagt schon mal dass du wieder eine Schleife über alle Artikel brauchst.


Devanther hat gesagt.:


> deren Bestand
> unter einen bestimmten Level gesunken ist (der als Parameter an die Methode übergeben wird)


das sagt aus dass diese Methode als Parameter einen Wert als Parameter kriegt der diesem Grenz-Level entspricht.
Und es sagt gleichzeitig aus dass du in der Schleife für jeden Artikel den Bestand holen musst und mit diesem Parameterwert vergleichst.


----------



## JStein52 (31. Jul 2017)

Devanther hat gesagt.:


> die die Details aller Artikel ausgibt


Das sagt aus dass du für alle Artikel die das Kriterium erfüllen was ausgeben sollst, also System.out.println(artikel);


----------



## JStein52 (31. Jul 2017)

Und das schreibst du jetzt mal in 4-5 Zeilen Java-Code auf und überlegst immer dabei wofür ist diese Zeile gut und tut sie wirklich das was ich wollte ?


----------



## Devanther (31. Jul 2017)

Ich brauche noch paar Ratschläge mehr.
Ich habe mir das jetzt x-mal durchgelesen...bevor ich absoluten Schwachsinn poste, noch nen Tipp, bitte.



```
public void alleArtikelAnzeigen()
{
   for(Artikel aktuellerArtikel: lager){
    System.out.println(aktuellerArtikel.toString());
}
```

Das ist die for-Schleife. Kann ich aus dieser Schleife etwas übernehmen?


```
den Bestand holen musst
```
Ich muss die gibBestand() Methode von Artikel aufrufen?


----------



## JStein52 (31. Jul 2017)

Ja die Schleife ist doch schon mal ok. Bis auf eine fehlende }
Aber die Methode soll ja einen Parameter haben (den level)  und der println ist im Prinzip auch ok aber er soll ja nicht immer gemacht werden !


----------



## Devanther (31. Jul 2017)

If (aktuellerArtikel = 250) ?


----------



## JStein52 (31. Jul 2017)

wenn schon dann :

```
if (aktuellerArtikel.gibBestand() < 250) {
.....
}
```

aber wie kommst du auf 250 ? dieser Level soll deiner Methode als Parameter übergeben werden


----------



## Devanther (31. Jul 2017)

```
public int level(level)
{
   Artikel a = aktuellerArtikel(level);
   for(Artikel aktuellerArtikel: lager){
    System.out.println(aktuellerArtikel.gibBestand() < 250) {
}
}
}
```

Nein, ich bekomme das einfach nicht zusammen!


----------



## JStein52 (1. Aug 2017)

Devanther hat gesagt.:


> Nein, ich bekomme das einfach nicht zusammen!


Doch ! Kann ja wohl nicht sein dass du an einer simplen if-Abfrage scheiterst ? Davor hattest du es schon mal richtiger. Dein letzter Versuch ist Schrott


----------



## Harry Kane (1. Aug 2017)

Devanther hat gesagt.:


> public int level(level)
> {
> Artikel a = aktuellerArtikel(level);
> for(Artikel aktuellerArtikel: lager){
> ...


1. Nichtssagender Methodenname "level". Vorschlag: zeigeArtikelUnterMindestbestand.
2. Fehlende Deklaration des Methodenparameters, und wenig sprechende Bezeichnung. Vorschlag: (int mindestBestand).
3. In "Artikel a = aktuellerArtikel(level)" wird "aktuellerArtikel" wie eine Methodenname verwendet (falsch), und die Variable "a" wird nie verwendet.
4. ImSysout stehen keine Artikeldaten, sondern nur, ob der Bestand unterhalb 250 liegt.
Ich bin raus. Ich kenne dein aktuelle Strategie zum Java lernen zwar nicht genau, aber sie scheint mir nicht für dich geeignet zu sein. Ich schätze du hast am Anfang ein paar Grundlagenkapitel übersprungen. Die solltest du dringend nachholen.


----------



## Devanther (1. Aug 2017)

Also ich habe die Grundlagenkapitel sogar mehrmals gelesen!
Und ich lese jetzt nochmal im Java ist auch eine Insel Buch.


```
public void zeigeArtikelUnterMindestbestand.(level)
{
   for(Artikel aktuellerArtikel: lager){
    if ( aktuellerArtikel.gibBestand()  <level ){
    System.out.println(aktuellerArtikel.toString());
}
else{
System.out.println("Der Artikel ist nicht unter dem Mindestbestand);
}
}
```


----------



## JStein52 (1. Aug 2017)

Gibst du das eigentlich nur hier im Forum ein oder benutzt du deine IDE  dazu ? Die müsste dir doch einige Fehler anzeigen. Bearbeite die doch mal. Und denke nochmal über 250 nach !! Wie kommst du auf 250 ? Wo steht das ?

Edit: Überlege mal was @Harry Kane mit seinem Punkt 2. oben gemeint hat ?


----------



## Xyz1 (1. Aug 2017)

Ich gratuliere zu 1.000 Aufrufen.
@Devanther : Deine Klammerung ist nicht eindeutig/confusing. Entscheide zuerst, ob du einzeilige Anweisungen kLammern möchtest, setze dann Klammern richtig.
Mit Klammern seien hier die geschweiften Klammern ({ }) gemeint.
Lass dich von @Harry Kane nicht ins Bockshorn jagen, ich bin mir fast sicher, der weiß es auch nicht besser.


----------



## JStein52 (1. Aug 2017)

DerWissende hat gesagt.:


> ich bin mir fast sicher, der weiß es auch nicht besser.


----------



## Devanther (1. Aug 2017)

Also im BlueJ Editor werden überall Fehler angezeigt, sogar bei den anderen Methoden die richtig sind...
das ist mir keine große Hilfe.


```
public void zeigeArtikelUnterMindestbestand(int mindestBestand)
{
   for(Artikel aktuellerArtikel: lager){
    if ( aktuellerArtikel.gibBestand()  < mindestBestand ){
    System.out.println(aktuellerArtikel.toString());
}
else{
System.out.println( "Der Artikel ist nicht unter dem Mindestbestand);
}
}
```



> System.out.println( "Der Artikel ist nicht unter dem Mindestbestand);



Da kommt ne Fehlermeldung: unclosed string literal


----------



## Harry Kane (1. Aug 2017)

Devanther hat gesagt.:


> Also im BlueJ Editor werden überall Fehler angezeigt, sogar bei den anderen Methoden die richtig sind


Manchmal führt ein einziger kleiner Tippfehler dazu, das seeehr viel Code auf einmal als falsch markiert wird, weil die IDE mit dem Code, der auf den Fehler folgt, gar nix mehr anfangen kann. Lösung: den Ort suchen, wo das rote Unterkringeln (oder wie auch immer BluJ Fehler anzeigt) anfängt, und dort nach Fehlern suchen.


DerWissende hat gesagt.:


> ich bin mir fast sicher, der weiß es auch nicht besser


Ups, erwischt! Macht aber nix, ein Wissender pro Forum sollte reichen.


----------



## mrBrown (1. Aug 2017)

Devanther hat gesagt.:


> Da kommt ne Fehlermeldung: unclosed string literal


Dann denk doch mal über die Meldung nach, die sagt in Verbindung mit der Zeile schon alles was du wissen musst


----------



## Devanther (1. Aug 2017)

Ich habe auch eclipse.
Klasse Bestandsverwalter:

```
package paket1;

import java.util.ArrayList;

public class Bestandsverwalter {

   
    private ArrayList<Artikel> lager;
   
    public Bestandsverwalter()
    {
        lager = new ArrayList<Artikel>();
       
       
    }
   
   
    public void zeigeArtikelUnterMindestbestand(int mindestBestand)
    {
       for(Artikel aktuellerArtikel: lager){
        if ( aktuellerArtikel.gibBestand()  < mindestBestand ){
        System.out.println(aktuellerArtikel.toString());
    }
    else{
    System.out.println( "Der Artikel ist nicht unter dem Mindestbestand");
    }
       }
    }
}
```

Klasse Artikel:

```
package paket1;

public class Artikel {

    public int gibBestand()
    {
        return gibBestand();
    }
}
```

Jetzt kommt keine Fehlermeldung, aber wenn ich auf ausführen gehe, wird nur "vorbei" ausgegeben.


----------



## mrBrown (1. Aug 2017)

Hast du irgendwo eine Main-Methode?


----------



## Devanther (1. Aug 2017)

Ja, natürlich. Flüchtigkeitsfehler^^


```
package paket1;

import java.util.ArrayList;


public class Bestandsverwalter {
   
    public static void main (String[] args) {

    }
    private ArrayList<Artikel> lager;
   
    public Bestandsverwalter()
    {
        lager = new ArrayList<Artikel>();
       
       
    }
   
   
    public void zeigeArtikelUnterMindestbestand(int mindestBestand)
    {
       for(Artikel aktuellerArtikel: lager){
        if ( aktuellerArtikel.gibBestand()  < mindestBestand ){
        System.out.println(aktuellerArtikel.toString());
    }
    else{
    System.out.println( "Der Artikel ist nicht unter dem Mindestbestand");
    }
       }
    }
}
```

Es wird gar nichts ausgegeben.


----------



## mrBrown (1. Aug 2017)

Du weißt auch wofür die Main da ist?


----------



## Devanther (1. Aug 2017)

Da muss man was hinschreiben, IN die main-Methode.
Die Frage ist nur was?


----------



## Xyz1 (1. Aug 2017)

Also ich zähle jetzt nicht die Klammern, aber mindestens ein Klammer zu viel/zu wenig kann es sein. Erstens, zweitens bei BlueJ brauchst du gar keine main() - und von Eclipse würd ich einmal abraten.


----------



## Devanther (1. Aug 2017)

Für eclipse bin ich noch nicht reif?^^
Hm. jetzt geht es in BlueJ plötzlich!


----------



## Xyz1 (1. Aug 2017)

Devanther hat gesagt.:


> Für eclipse bin ich noch nicht reif?


Das könnte es sein - oder Eclipse ist noch unausgegoren. 
Aber manchmal kommt man nicht drumrum. 
Genug Smalltalk.


----------



## JStein52 (1. Aug 2017)

Devanther hat gesagt.:


> Für eclipse bin ich noch nicht reif?


Doch, du schon aber @DerWissende nicht


----------



## Xyz1 (1. Aug 2017)

JStein52 hat gesagt.:


> Doch, du schon aber @DerWissende nicht


Keine Beleidigungen, für ihn funktioniert es mit BlueJ, dabei sollte er es auch belassen


----------



## JStein52 (1. Aug 2017)

DerWissende hat gesagt.:


> für ihn funktioniert es mit BlueJ


tut es eben nicht. Er entwickelt null Verständnis für ein zusammenhängendes Java-Programm. Deshalb BlueJ löschen, Eclipse benutzen.


----------



## Devanther (1. Aug 2017)

Ich werde beides verwenden!

Wie kann ich das was ich bisher realisiert habe, also alle Aufgaben aus dem Artikelbestand in eclipse umsetzen?
Wie geht das?
Ich erstelle in eclipse 2 Klassen, Bestandsverwalter und Artikel, kopiere den Quelltext.
Wie klicke/verwende ich dann die Methoden die ich erstellt habe?
Wie soll ich dann in eclipse z.B. die 1ste Methode alleArtikelAnzeigen starten?
In BlueJ erstellt man ja einfach ein Objekt/Instanz von Bestandsverwalter
und kann dann die einzelnen Methoden sehen und anklicken.


----------



## JStein52 (1. Aug 2017)

@DerWissende siehst du, jetzt bist du gefragt. Bei BlueJ bin ich raus


----------



## Xyz1 (1. Aug 2017)

JStein52 hat gesagt.:


> jetzt bist du gefragt


Ok, aber heute nicht mehr. Ich wollte schon vor ner Stunde meinen Vodka Kirsch trinken.


----------



## Devanther (1. Aug 2017)

Ja, mach das. Hast du dir verdient ^^


----------



## Devanther (2. Aug 2017)

Es gibt noch noch eine Aufgabe:
Verändern Sie die Methode *neuerArtikel* so, dass ein neuer Artikel
nicht eingefügt werden kann. wenn bereits ein Artikel mit dieser Nummer existiert.
Und es sollte dann noch eine Fehlermeldung ausgegeben werden.


```
public void neuerArtikel(Artikel artikel)
    {
        lager.add(artikel);
    }
```


----------



## Flown (2. Aug 2017)

Wie sieht dein Ansatz/Idee dazu aus?


----------



## JStein52 (2. Aug 2017)

Denk dran, du hast bereits eine Methode zum suchen eines Artikels anhand seiner Artikelnummer .....


----------



## Harry Kane (2. Aug 2017)

Devanther hat gesagt.:


> ```
> package paket1;
> public class Artikel {
> public int gibBestand(){
> ...


Wenn DAS die Artikel-Klasse ist, hast du sie seit deinem ersten Post in diesem Thread massiv verschlimmbessert. Sobald du gibBestand() auf einem Artikel aufrufst, sollte innerhalb von Sekundenbruchteilen ein StackOverflowError geworfen werden.


DerWissende hat gesagt.:


> zweitens bei BlueJ brauchst du gar keine main()


Sehr nützlicher Hinweis. Warum sollte man sich die Bürde einer main-Methode auferlegen, wenn man das, wofür sie gedacht ist, auch auf zig Umwegen erreichen kann.


----------



## Xyz1 (2. Aug 2017)

Harry Kane hat gesagt.:


> Sehr nützlicher Hinweis. Warum sollte man sich die Bürde einer main-Methode auferlegen, wenn man das, wofür sie gedacht ist, auch auf zig Umwegen erreichen kann


Du hast BlueJ noch nicht verstanden - und redest jetzt so daher


----------



## Harry Kane (2. Aug 2017)

DerWissende hat gesagt.:


> Du hast BlueJ noch nicht verstanden


Bitte bleibe doch beim Thema. Es geht in diesem Thread doch gar nicht darum, was ich kann oder verstehe oder auch nicht oder wie oder was (obwohl du aus welchem Grund auch immer dazu tendierst, das zum Thema zu machen), sondern darum, was dem TE beim Verstehen von Java hilft oder eher nicht.
Eine der zentralen Fragen in seinem letzten Thread war, wo und wie die an seinem Projekt beteiligten Klassen instanziiert werden. Die public static void main ist dazu ein geeignter Ort: Bestandsverwaltung erstellen, Artikel erstellen, dann Artikel in die Bestandsverwaltung packen, und mit den bereits mehr als hinlänglich diskutierten Methoden nach Artikeln suchen, etc. Offenbar verbirgt BlueJ bestimme Abläufe beim normalen Starten und Ablaufen lassen eines Java-Programms vor dem Benutzer. Mein Eindruck ist, dass das dem TE das Verstehen der Abläufe nicht erleichtert, sondern erschwert, und das dadurch auch der Lernfortschritt in diesem Thread negativ beeinflusst wird.


----------



## Xyz1 (2. Aug 2017)

Nochmal, er kommt bis jetzt ganz gut klar mit BlueJ. Nach dreimal Schlafen wird er es auch in ner IDE umsetzen können. Zudem bin ich nicht für seinen "Lernfortschritt" verantwortlich.
Aber bitte das Portieren einer BlueJAnwenung in eine IDE erfordert lediglich das Hinzufügen einiger Methoden sowie Aufrufe. Und zwar solche, wie er sie bereits bei BlueJ "angeklickt" hat.


----------



## JStein52 (2. Aug 2017)

DerWissende hat gesagt.:


> erfordert lediglich das Hinzufügen einiger Methoden sowie Aufrufe. Und zwar solche, wie er sie bereits bei BlueJ "angeklickt" hat


Na dann .... frisch auf ans Werk. Erkläre ihm was er tun muss. Er hat nämlich noch keine Idee wie ein Java-Programm abläuft. Vor allem wenn er mehr machen soll als nur mal    new Bestandsverwaltung();


----------



## Xyz1 (2. Aug 2017)

JStein52 hat gesagt.:


> Er hat nämlich noch keine Idee wie ein Java-Programm abläuft


Nicht, dass ich gegrillt werde, aber wäre da eines der guten Bücher nicht naheliegender?


----------



## Harry Kane (2. Aug 2017)

DerWissende hat gesagt.:


> Nochmal, er kommt bis jetzt ganz gut klar mit BlueJ


Er soll nicht mit BlueJ "klarkommen" (das hier ist schliesslich primär kein BlueJ-Erklärungsforum), sondern er soll Java lernen und verstehen.
Aber sag ihm ruhig weiterhin, das BlueJ für ihn ok ist. Manche Menschen neigen halt dazu, einen einmal eingeschlagenen Weg weiterzugehen, anstatt sich umzuorientieren. Das mag zwar dem Wohlgefühl dienlich sein, aber nicht notwendigerweise dem Vorwärtskommen. Aber wie du schon oben gesagt hast: das ist nicht unser Problem.


----------



## Devanther (2. Aug 2017)

```
public void neuerArtikel(int nummer)
    {
       lager.add(artikel);

        for(Artikel aktuellerArtikel: lager){
              if (aktuellerArtikel.gibNummer() == nummer) {
                 (kann nicht eingefügt werden code)
System.out.println("Es existiert bereits ein Artikel mit dieser Nummer!");
              }
         }
     
    }
```
Verändern Sie die Methode *neuerArtikel* so, dass ein neuer Artikel
nicht eingefügt werden kann. wenn bereits ein Artikel mit dieser Nummer existiert.
Und es sollte dann noch eine Fehlermeldung ausgegeben werden.


----------



## JStein52 (2. Aug 2017)

Die Fehlermeldung gibst du ja schon aus. Aber du fügst den Artikel trotzdem dazu. Guck mal wo dein add(artikel); steht ! Und wenn du mal in deinem allerallerallerersten Post hier schaust dann hat neuerArtikel nicht die Artikelnummer als Parameter sondern den Artikel !


----------



## JStein52 (2. Aug 2017)

Hier noch mal in Worten:

```
public void neuerArtikel(Artikel artikel)
    {
       // Artikelnummer holen


        for(Artikel aktuellerArtikel: lager){
              if (aktuellerArtikel.gibNummer() == nummer) {
                 System.out.println("Es existiert bereits ein Artikel mit dieser Nummer!");
                 // Methode verlassen und nichts weiter tun
              }
         }
       lager.add(artikel);
    }
```


----------



## Devanther (2. Aug 2017)

Komisch! Ich kann weiterhin Artikel mit der selben Nummer hinzufügen.
Es kommt auch keine Fehlermeldung.
Woran liegt das?


----------



## JStein52 (2. Aug 2017)

Devanther hat gesagt.:


> Woran liegt das?


Vermutlich an dem was du da gemacht hast. Zeig es doch mal


----------



## Devanther (2. Aug 2017)

Ich weiss nicht, wie ich das zeigen soll


----------



## JStein52 (2. Aug 2017)

Strg c  und Strg v ...


----------



## Devanther (2. Aug 2017)

```
import java.util.ArrayList;

/**
* Verwalte den Bestand eines Unternehmens.
* Der Bestand ist beschrieben durch einen oder
* mehrere Artikel.
*
* @author (Ihr Name)
* @version (eine Versionsnummer oder ein Datum)
*/
public class Bestandsverwalter
{
    // Das Lager mit den Artikeln
    private ArrayList<Artikel> lager;
   
    private int nummer;

    /**
     * Initialisiere den Bestandsverwalter.
     */
    public Bestandsverwalter()
    {
        lager = new ArrayList<Artikel>();
       
    }

    /**
     * Führe einen neuen Artikel im Lager ein.
     * @param artikel Der Artikel, der neue eingeführt werden soll.
     */
    public void neuerArtikel(Artikel artikel)
    {
       // Artikelnummer holen


        for(Artikel aktuellerArtikel: lager){
              if (aktuellerArtikel.gibNummer() == nummer) {
                 System.out.println("Es existiert bereits ein Artikel mit dieser Nummer!");
                 // Methode verlassen und nichts weiter tun
              }
         }
       lager.add(artikel);
    }
   
    public void zeigeArtikelUnterMindestbestand(int mindestBestand)
    {
       for(Artikel aktuellerArtikel: lager){
        if ( aktuellerArtikel.gibBestand()  < mindestBestand ){
        System.out.println(aktuellerArtikel.toString());
    }
    else{
    System.out.println( "Der Artikel ist nicht unter dem Mindestbestand");
    }
       }
    }
   
   
    /**
     * Nimm eine Lieferung eines Artikels in das Lager auf.
     * Erhöhe den Lagerbestand um die angegebene Menge.
     * @param nummer Die Artikelnummer des Artikels.
     * @param menge Die angelieferte Menge.
     */
   
public void aufnehmen(int nummer, int menge)
    {
        Artikel a = findeArtikel(nummer);
        if(a != null){
            a.erhoeheBestand(menge);
        }
    }
   
    /**
     * Versuche einen Artikel mit der angegebenen Nummer im
     * Bestand zu finden.
     * @param nummer die Nummer des zu findenden Artikels.
     * @return den gefundenen Artikel oder null, falls kein
     *         passender Artikel gefunden wird.
     */
     public Artikel findeArtikel(int nummer)
    {
         for(Artikel aktuellerArtikel: lager){
              if (aktuellerArtikel.gibNummer() == nummer) {
                 return aktuellerArtikel;
              }
         }
        return null;
    }
   
    /**
     * Finde einen Artikel mit der angegebenen Nummer und
     * liefere seine aktuelle Menge im Bestand.
     * Wenn die Nummer auf keinen Artikel passt, wird
     * Null zurückgeliefert.
     * @param nummer die Nummer des Artikels.
     * @return die Menge des Artikels im Bestand.
     */
    public int mengeImBestand(int nummer){
        Artikel a = findeArtikel(nummer);
        if(a != null){
            return a.gibBestand();
        }
        return 0;
    }

    /**
     * Informationen über alle Artikel ausgeben.
     */
    public void alleArtikelAnzeigen()
{
   for(Artikel aktuellerArtikel: lager){
    System.out.println(aktuellerArtikel.toString());
}
}
}
```


----------



## JStein52 (2. Aug 2017)

Hast du die Kommentare gelesen die ich da reingeschrieben hatte ? Das sollst du auch tun was da steht


----------



## Devanther (2. Aug 2017)

Welchen Kommentar genau meinst du?


----------



## JStein52 (2. Aug 2017)

Da stehen zwei kommentare in der Methode und ich meine beide


----------



## Devanther (2. Aug 2017)

// Artikelnummer holen
// Methode verlassen und nichts weiter tun

Ja?


----------



## JStein52 (2. Aug 2017)

jep


----------



## Joose (2. Aug 2017)

Devanther hat gesagt.:


> // Artikelnummer holen
> // Methode verlassen und nichts weiter tun


Diese Kommentare sind Platzhalter von JStein52 um dir zu sagen hier musst DU noch Code ergänzen, damit die Methode das macht was du willst.


----------



## Devanther (2. Aug 2017)

Achso!

```
public void neuerArtikel(Artikel artikel)
    {
       artikel.gibNummer();


        for(Artikel aktuellerArtikel: lager){
              if (aktuellerArtikel.gibNummer() == nummer) {
                 System.out.println("Es existiert bereits ein Artikel mit dieser Nummer!");
                 return;// Methode verlassen und nichts weiter tun
              }
         }
       lager.add(artikel);
    }
```

Es kommt keine Fehlermeldung aber es funktioniert immer noch nicht.
Es können immer noch mehrere Artikel mit der selben Nummer eingefügt werden.


----------



## JStein52 (2. Aug 2017)

Devanther hat gesagt.:


> if (aktuellerArtikel.gibNummer() == nummer)


so lange du Äpfel mit Birnen vergleichst wird es nicht funktionieren. Aber der return sitzt schon mal an der richtigen Stelle

Edit: ein Tip noch: gibNummer hat auch einen Rückgabewert ...


----------



## Devanther (2. Aug 2017)

```
public void neuerArtikel(Artikel artikel)
    {
       artikel.gibNummer();
       return;

        for(Artikel aktuellerArtikel: lager){
              if (aktuellerArtikel.gibNummer() == artikel) {
                 System.out.println("Es existiert bereits ein Artikel mit dieser Nummer!");
                 return;// Methode verlassen und nichts weiter tun
              }
         }
       lager.add(artikel);
    }
```

Ich bekomm die Fehlermeldung bei "==artikel" einfach nicht weg.
incomparable types: int and Artikel


----------



## thecain (2. Aug 2017)

Was gibts denn für Methoden auf Artikel? eventuell ein gibNummer (ja, das ist rhetorisch)?

Grundlagen, Grundlagen, Grundlagen.. seit 11 Seiten das Selbe...

Ach ja... jetzt ist das eine Return übrigens falsch... weisst du was return macht?


----------



## Xyz1 (2. Aug 2017)

Lesen, lesen, lesen... verstehen... anwenden... UND DANN ERST Frage(n) stellen.
Sonst hat es ein Potential, ein sehr langes Thema mit viiielen Aufrufen zu werden.
Was ich eigentlich sagen wollte oder, ich halte mich raus aus dem Thema.


----------



## JStein52 (2. Aug 2017)

DerWissende hat gesagt.:


> ich halte mich raus aus dem Thema.


Zuerst mit BlueJ bequatschen und dich dann raushalten ... 

Edit: Dabei war er mal soooo dicht davor.  
	
	
	
	





```
nummer = artikel.gibNummer();
```
 und alles war gut. Aber dann gings wieder in die falsche Richtung


----------



## Devanther (2. Aug 2017)

return, gibt etwas zurück.
Ich weiss es nicht, ich komme nicht weiter.
Immer wenn ich was verändere kommen Fehlermeldungen.

edit:

```
public void neuerArtikel(Artikel artikel)
    {
       artikel.gibNummer();
       return;

        for(Artikel aktuellerArtikel: lager){
              if (aktuellerArtikel.gibNummer() == artikel.gibNummer(){
                 System.out.println("Es existiert bereits ein Artikel mit dieser Nummer!");
                 return;// Methode verlassen und nichts weiter tun
              }
         }
       lager.add(artikel);
    }
```

So? Dann kommt bei der { eine Fehlermeldung -.-


----------



## Joose (3. Aug 2017)

Devanther hat gesagt.:


> Ich weiss es nicht, ich komme nicht weiter.
> Immer wenn ich was verändere kommen Fehlermeldungen.



Dann lerne die Grundlagen und versuche dich an einfacheren Beispielen.
Du hast einfach noch große Lücken im Grundwissen und weißt nicht mal um die korrekte Syntax eines Java Programmes bescheid.
Außerdem musst du lernen die Fehlermeldungen die dir eine IDE (oder der Compiler) zeigt zu lesen und zu verstehen. Auch selbst im Internet nach Lösungen zu suchen gehört dazu. (nein gleich im Forum einen Thread aufmachen ist nicht nach einer Lösung suchen)
Und bevor du Änderungen am Code vornimmst solltest du dir im klaren sein welche Auswirkungen diese Änderungen am verhalten haben.



Devanther hat gesagt.:


> So? Dann kommt bei der { eine Fehlermeldung -.-


Wenn du schon sagst das eine Fehlermeldung kommt dann sag immer dazu welche Fehlermeldung! Wir wollen nicht raten!


```
if (aktuellerArtikel.gibNummer() == artikel.gibNummer(){
```
Schau dir doch nochmal das Kapitel zu if-Blöcken an und wie die Syntax dazu ausschaut und dann überlege dir warum du hier einen Fehler bekommst 
Ansonsten einfach mal nach deiner Fehlermeldung googlen ... du bist nicht der erste der dieses Problem hat und es gibt unzähliche Foren und Seiten wo die Lösung schon geschrieben steht.


----------



## JStein52 (3. Aug 2017)

Joose hat gesagt.:


> Schau dir doch nochmal das Kapitel zu if-Blöcken an und wie die Syntax dazu ausschaut


Ja, aber er wird bei der Zeile davor schon eine Fehlermeldung kriegen wegen "unreachable Code"


----------



## Devanther (3. Aug 2017)

Als Fehlermeldung kommt )expected.
Ich hab keine Ahnung, wie ich den Fehler beheben kann -.-


----------



## thecain (3. Aug 2017)

Ich sehs in einem Blick... der Fehler ist: 


Devanther hat gesagt.:


> )expected


Oder auch ") erwartet" oder auch "du hast eine schliessende Klammer vergessen!!!"


----------



## mrBrown (3. Aug 2017)

Wenn die Fehlermeldung sagt, dass er eine Klammer erwartet, wie könnte man das wohl beheben?
Hast du mal die Klammern in der Zeile gezählt?


----------



## Devanther (3. Aug 2017)

peinlich, aber ich kann den Fehler nicht beheben.
Wenn ich ne Klammer hinzufüge kommen überall im Quelltext Fehler angezeigt...


----------



## JStein52 (3. Aug 2017)

Und was besagen die dann ? Ich denke mal dass er zu allem hinter deinem ersten return sagt: "unreachable code"


----------



## Devanther (3. Aug 2017)

> Und was besagen die dann ? Ich denke mal dass er zu allem hinter deinem ersten return sagt: "unreachable code"



Nein, hinter return wird keine Fehlermeldung ausgegeben.
http://imgur.com/a/T6zBq


----------



## JStein52 (3. Aug 2017)

Ok, d.h. du hast den zuletzt geposteten Code schon korrigiert und nur noch ein return drin ? Wie sieht er denn jetzt aus ?


----------



## Devanther (3. Aug 2017)

http://imgur.com/a/T6zBq
? Ich glaube wir reden einander vorbei...


----------



## Harry Kane (3. Aug 2017)

Muss mich noch ein letztes Mal zu Wort melden.
Wenn dem BlueJ an der markierten Stellen ausser "Error(s) found in class" keine weitere Erklärung oder Fehlermeldung mehr einfällt, ist es nicht für Einsteiger geeignet.
@TE Wenn du allerdings mit den bisherigen Hinweisen immer noch nicht imstande bist, den Fehler zu beheben (an der von BlueJ markierten Stelle fehlt nämlich wie schon mehrfach gesagt ein ")"), solltest du einfach mal Java lernen und nicht nur Aufgaben und Quellcode hier im Forum posten.
[edit] Ich habe gerade in NetBeans eine Testklasse mit unreachable statements erstellt. NB kan sie sogar ausführen, und bei Änderungen an der Klasse (die den unreachable Code aber nicht beheben) sehe ich auch die gemachten Änderungen auf der Konsole. Der javac steigt allerdings mit einer Fehlermeldung aus. KA was NB da im Hintergrund deichselt. Wenn BlueJ das aber ähnlich handhabt (also auch fehlerhaften Code irgendwie ausführen kann), kann es gut sein, das der TE vom unreachable code nix mitbekommt, wei BlueJ den Fehler nicht anzeigt und die Klasse bzw. Methode trotzdem bis zum return ausführt. Das Verhalten wäre allerdings eine guter Grund, auf was anderes umzusteigen.


----------



## thecain (3. Aug 2017)

") expected" hat er ja vorher erwähnt, das muss er ja von irgendwo haben... 

@TE, mach jetzt einfach mal diese Klammer die er dir anmerkt... 

Und ich bin wieder maximal passiver Leser hier.. das führt zu nix


----------



## Devanther (3. Aug 2017)

")") wenn ich das an die markierte Stelle hinzufüge kommt wieder ne Fehlermeldung. ohman^^


----------



## Harry Kane (3. Aug 2017)

WAS fügst du genau WO ein? Quelltext! Das wurde dir auch schon mehrfach gesagt.


----------



## Devanther (3. Aug 2017)

Ich weiss es nicht, kann jemand den vollständigen Quelltext der Methode 
* public void neuerArtikel(Artikel artikel) *posten? 
Egal was ich mache, es kommt immer irgendwo ne Fehlermeldung.


----------



## Harry Kane (3. Aug 2017)

Devanther hat gesagt.:


> Ich weiss es nicht


Was weisst du nicht?


----------



## Devanther (3. Aug 2017)

Wie ich die Klammer/Klammern was auch immer setzen muss.
Das die Methode funktioniert ohne dass immer ne Fehlermeldung kommt.


----------



## Harry Kane (3. Aug 2017)

Dann zeige deinen Quellcode mit der Fehlermeldung.


----------



## Devanther (3. Aug 2017)

Hab ich schon oben gepostet:
http://imgur.com/a/T6zBq

) expected


----------



## Harry Kane (3. Aug 2017)

Das war der Originalcode. Dann kam das hier von dir:


Devanther hat gesagt.:


> ")") wenn ich das an die markierte Stelle hinzufüge kommt wieder ne Fehlermeldung. ohman^^


Schlussfolgerung: Du hast den Code geändert. Und den geänderten Code würde ich gerne sehen.


----------



## JStein52 (3. Aug 2017)

Kann nicht mal endlich jemand die versteckte Kamera wegtun ...


----------



## Harry Kane (3. Aug 2017)

@JStein52 Heeee. Nicht stören. Ich bin gerade am trainieren.


----------



## mrBrown (3. Aug 2017)

Harry Kane hat gesagt.:


> Ich habe gerade in NetBeans eine Testklasse mit unreachable statements erstellt. NB kan sie sogar ausführen, und bei Änderungen an der Klasse (die den unreachable Code aber nicht beheben) sehe ich auch die gemachten Änderungen auf der Konsole. Der javac steigt allerdings mit einer Fehlermeldung aus. KA was NB da im Hintergrund deichselt. Wenn BlueJ das aber ähnlich handhabt (also auch fehlerhaften Code irgendwie ausführen kann), kann es gut sein, das der TE vom unreachable code nix mitbekommt, wei BlueJ den Fehler nicht anzeigt und die Klasse bzw. Methode trotzdem bis zum return ausführt. Das Verhalten wäre allerdings eine guter Grund, auf was anderes umzusteigen.


Müsste der Eclipse-Compiler sein, der kompiliert auch bei einfachen Fehlern - an den entsprechenden Stellen würde dann ne Exception geworfen werden. Zum entwickeln manchmal ganz praktisch


----------



## JStein52 (3. Aug 2017)

mrBrown hat gesagt.:


> der kompiliert auch bei einfachen Fehlern


Wobei ja gerade der Fall "unreachable Statement" kein Fehler ist der Exceptions werfen sollte. Ich frage mich sowieso wieso der Compiler mich da bevormundet und behauptet das wäre ein Fehler ?


----------



## mrBrown (3. Aug 2017)

JStein52 hat gesagt.:


> Wobei ja gerade der Fall "unreachable Statement" kein Fehler ist der Exceptions werfen sollte. Ich frage mich sowieso wieso der Compiler mich da bevormundet und behauptet das wäre ein Fehler ?



Weil das in so ziemlich jedem Fall ein Fehler ist? Nicht erreichbarer Code ist doch kein Code, der „richtig“ ist.

Von mir aus könnte der Compiler da gern noch deutlich mehr anmeckern


----------



## Devanther (3. Aug 2017)

Also, wie lautet nun der Endcode?


----------



## Harry Kane (3. Aug 2017)

Was ist ein "Endcode"?


----------



## Devanther (3. Aug 2017)

Ja, die vollständige Methode von *public void neuerArtikel(Artikel artikel).*
Sodass kein Artikel mit der selben Nummer eingefügt werden kann und ne Fehlermeldung endlich mal kommt.


----------



## Harry Kane (3. Aug 2017)

Devanther hat gesagt.:


> und ne Fehlermeldung endlich mal kommt.


Du hast doch schon eine Fehlermeldung. Die mit dem fehlenden ")".


----------



## Devanther (3. Aug 2017)

Ich meine diese Fehlermeldung 
System.out.println("Es existiert bereits ein Artikel mit dieser Nummer!");


----------



## Harry Kane (3. Aug 2017)

Ach so.


----------



## JStein52 (3. Aug 2017)

mrBrown hat gesagt.:


> Nicht erreichbarer Code ist doch kein Code, der „richtig“ ist.


Das nicht. Aber manchmal eine bequeme Möglichkeit den restlichen Code einer Methode vorrübergehend "lahmzulegen"


----------



## Harry Kane (3. Aug 2017)

```
public void neuerArtikel(Artikel artikel){
        for(Artikel vorhandenerArtikel: lager){
            if(vorhandenerArtikel.gibNummer() == artikel.gibNummer(){
                System.out.println("Es existiert bereits ein Artikel mit dieser Nummer");
                return;
            }
        }
        lager.add(artikel);
    }
```


----------



## JStein52 (3. Aug 2017)

Ich sag es nur ungern, aber das ist falsch. Guck mal nach den Klammern


----------



## Meniskusschaden (3. Aug 2017)

Ich vermute mal, @Harry Kane wollte es bewußt so weit vorbereiten, daß als Eigenleistung nur noch der Klammerfehler beseitigt werden muß. Es ist ja noch immer unklar, ob @Devanther die schon mal korrekt gesetzt hatte und es nur aufgrund anderer Fehlermeldungen wieder beseitigt hat.


----------



## Devanther (3. Aug 2017)

@Harry Kane
Ja, danke. Es geht alles. Das war jetzt einfach.
Ich habe mich nur auf die Klammer konzentriert, und den Fehler mit return nicht berücksichtigt bzw. artikel.gibNummer war falsch.


----------



## Meniskusschaden (3. Aug 2017)

Nur noch mal zur Erinnerung: Mit dem Vorschlag von @JStein52 aus Post 84 wäre das auch gegangen, ohne eine neue Schleife zu programmieren.


----------



## Harry Kane (4. Aug 2017)

Na dann so:

```
public void neuerArtikel(Artikel artikel){
   Artikel suchErgebnis = findeArtikel(artikel.gibNummer());
       if(suchErgebnis != null){
           System.out.println("Es existiert bereits ein Artikel mit dieser Nummer");
       }
       else{
            lager.add(artikel);
       }
}
```


----------



## Flown (4. Aug 2017)

Ich muss hier jetzt bald mal einschreiten.

Erstmal ein großes Dankeschön! an alle helfenden Hände hier, die so tatkräftig unterstützen.

Grundsätzlich ist dieses Forum eine Hilfe zur Selbsthilfe und kein persönliches Tutorium. Damit das auch für zukünftige Programmierergenerationen ein Wissensfundus bleibt, ist es unerlässlich, dass die Fragen und die Antworten strukturiert und dazu gleich gefunden werden sollten!

Nachdem dieser Thread hier schon 15! Seiten hat und mehr als 8 Fragen beinhaltet, möchte ich bitte jeden dazu anhalten, in Zukunft darauf aufmerksam zu machen, dass ein Thread pro Frage aufgemacht wird (außer natürlich es ist ein Bundle von Fragen die zusammengehören). Mir ist eigentlich egal wieviele Seiten ein Thread hat, doch das geballte Wissen auf 15 Seiten verteilt ist einfach zuviel.


----------

