Stimmen diese Methoden für meine ArrayList?

...komplette Frage anzeigen Klasse 1 - (programmieren, Informatik, Java) Klasse 2 - (programmieren, Informatik, Java)

3 Antworten

Ah du schon wieder ;)

Ok...

Nur mal vorneweg, du hast ganz schönen Mist geschrieben...

Erstens:

Die Methode "anzahlImSpeicher" ist ziemlich sinnentleert...

Du übergibst ihr einen String "gesuchtes Produkt", was du aber völlig ignorierst und einfach nur die Gesamtgröße der ArrayList zurückgibst.

Das ist natürlich falsch...

So, nun machen wir das mal richtig...

Eine Musterlösung von mir würde so aussehen:

public int anzahlImSpeicher(String gesuchtesProdukt)
{
   int result = 0  //Hier wird das Endergebnis gespeichert


   // Was hier kommt ist eine sogennante "erweiterte for-Schleife
   // Sie macht nichts anderes, als für jedes Produkt in deiner
   // ArrayList einen Durchlauf vom Rumpf für jedes enthaltene
   // Element zu machen

   // Sieh den Kopf dieser Schleife so:
   // for(Produkt produkt : produkte) bedeutet in etwa:
   // Für jedes "produkt" in "produkte" wird der Rumpf ausgeführt...
   for(Produkt produkt : produkte)
   {
      // Strings IMMER mit der .equals()-Methode vergleichen !!!!
      if(produkt.getname().equals("gesuchtesProdukt")
      {
         result++;
      }
      // Wir schauen für jedes einzelne Objekt in der Liste,
      // ob es unser gesuchtes ist. Falls dies zutrifft, erhöhen
      // wir den Zähler um Eins und geben ihn am Ende aus.
   }
   return result
}

So viel dazu...

Und nein, deine entfernen-Methode ist NICHT richtig...

Du möchtest jetzt aus deiner ArrayList von Produktobjekten ein gewisses Objekt entfernen, indem du einen String angibst, der den Namen von dem zu entfernenden Objekt repräsentiert. Dann kannst du der ArrayList nicht einfach einen String geben, den er entfernen soll, das kann er auch gar nicht, er hält ja nur Produkt-Objekte und keine Strings. Das musst du irgendwie berücksichtigen.

...

Und für den Rest bin ich gerade irgendwie zu faul xD


PS: Das, was ihr da macht ist echt hässlich. Normalerweise, würde man nie im Leben Strings als Namen übergeben, weil dann so ein Mist wie beim entfernen zum Problem wird, sondern gleich ganze Produkt-Objekte, wie du es ja auch bei der Methode "fuegeHinzu" gemacht hast, das hat aber leider auch einen ganz guten Grund, also musst du da auch leider durch ;)

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Plokapier
19.05.2017, 19:00

Wenn du willst, helfe ich dir auch mit dem Rest, sag einfach Bescheid, oder wenn du Fragen hast.

1

Was ich nicht ganz verstehe ist, wieso du dein Programm nicht einfach mal testest, wenn du dir unsicher bist, ob es richtig funktioniert. Die Fehlermeldungen, die im unteren Fenster Problems angezeigt werden, ignorierst du wohl lieber. 😐

1) Also testen.

2) Ja, das ist falsch. Wenn du einen Korb voller Obst hast und nur die Anzahl an Birnen aus diesem haben möchtest, kannst du nicht einfach die Anzahl aller Früchte zurückgeben. Stattdessen musst du jede Frucht einzeln aus dem Korb nehmen, prüfen, ob es eine Birne ist und je nachdem deiner Strichliste einen Strich hinzufügen. Am Ende zählst du alle Striche zusammen.

3) Nein. Deine Liste enthält Produkte, keine Strings. Dies wird durch den generischen Typ abgesichert.

ArrayList<Produkt> produkte;

Bezogen auf mein obiges Obstbeispiel:

Ein Händler steht vor dir mit einem Obstkorb und stellt die Regel auf: Hier, in diesen Korb, dürfen nur Früchte hinein, nichts anderes. Dann kannst du dich darauf verlassen, dass darin nur Früchte sind. Solltest du auf die Idee kommen, stattdessen ein Spielzeugauto z.B. hineinlegen zu wollen, verstößt du gegen das Fruchtkorbgesetz. Wenn du den Händler darum bittest, bspw. ein Spielzeugauto aus dem Korb herauszugeben, wird er nicht wissen, was du von ihm willst. Er erwartet nur Früchte in dem Korb.

4) 

(...) ich glaube allerdings, dass das falsch ist.

Und wieso glaubst du das? Was meinst du, wird daran falsch sein, was musst du möglicherweise ändern?

5)

Stell dir vor, du hättest in einem Korb Rechnungen liegen. Auf denen steht der Name eines Produkts sowie dessen Preis. Wie würdest du denn nun den Gesamtpreis aller Rechnungen berechnen? Es geht mir bei dieser Frage vorerst nur um die Arbeitsschritte, nicht um die konkrete Umsetzung im Programmcode.

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?