Artikelbestand

Devanther

Top Contributor
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?
 
Zuletzt bearbeitet:

Devanther

Top Contributor
Klasse Bestandsverwalter:
Code:
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:
Code:
/**
* 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);
        }
    }
}
 

Devanther

Top Contributor
Code:
    /**
     * 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

Top Contributor
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) ;)

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

Devanther

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

Es kommen wieder Fehlermeldungen.
 

thecain

Top Contributor
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

Top Contributor
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

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

Das steht im Buch^^

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

bei lager kommt noch ne Fehlermeldung
 

Harry Kane

Top Contributor
Die Fehlermeldung kommt daher, weil lager keine Strings enthält, sondern Artikel.
Java:
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?
 
Zuletzt bearbeitet:

JStein52

Top Contributor
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

Top Contributor
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

Top Contributor
Klasse Bestandsverwalter bis jetzt:

Code:
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:
Code:
/**
* 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)
 

JStein52

Top Contributor
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;
 

Devanther

Top Contributor
1. Es müssen Artikel eingetragen werden
So wie bei der letzen Aufgabe:
Code:
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?
Code:
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.
 
Zuletzt bearbeitet:

Harry Kane

Top Contributor
(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.
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

Top Contributor
@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

Top Contributor
Code:
/**
     * 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

Top Contributor
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.
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

Top Contributor
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:
Code:
/**
     * 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
 

Harry Kane

Top Contributor
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

Top Contributor
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.
 
Zuletzt bearbeitet:

Devanther

Top Contributor
Klasse Bestandsverwalter:
Code:
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:
Code:
/**
* 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

Top Contributor
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

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

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

Total falsch, mein Vorschlag!
 
Zuletzt bearbeitet:

tommysenf

Top Contributor
Java:
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...
 

Harry Kane

Top Contributor
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)
Java:
    public int mengeImBestand(int nummer){
        Artikel a = findeArtikel(nummer);
        if(a != null){
            return a.gibNummer();
        }
        return 0;
    }
 

Devanther

Top Contributor
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.
 

Harry Kane

Top Contributor
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* ;-)
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.
 

Devanther

Top Contributor
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.

Code:
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

Top Contributor
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.
 

JStein52

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

Devanther

Top Contributor
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

Top Contributor
die Details aller Artikel
Das sagt schon mal dass du wieder eine Schleife über alle Artikel brauchst.
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.
 

Neue Themen


Oben