Das Schrecken beginnt in Zeile 8 mit dem Erstellen der Variable warenkorbItem.
Kommentiere dies schleunigst aus.
Nun entdeckt man alsgleich Fehler in Zeile 19 und 34.
Den Fehler in Zeile 19 behebt man recht einfach in dem man dort die Variable warenkorbItem definiert.
Der Fehler in Zeile 34 bleibt allerdings bestehen. Dann schaut man genauer hin und sieht, dass es dort garnicht warenkorbItem sondern warenkorbItem3 sein sollte.
Dennoch bleibt der Code etwas gruselig.
Angenommen es gäbe eine einfache Funktion. Die einen Warenkorb bekommt sowie ein Produkt und zurückliefert ob dieses Produkt im Warenkorb enthalten ist:
public boolean hasProdukt(Warenkorb warenkorb, Produkt produkt) {...}
Und eine Funktion die ein entsprechendes WarenkorbItem aus einem Warenkorb zurückgibt. public boolean getWarenkorbItem(Warenkorb warenkorb, Produkt produkt) {...}
Dann kann man das ganze auch etwas einfacher haben.
Produkt addedProdukt = produktRepository.findById(aId);
if(hasProdukt(produkteWarenkorb, addedProdukt)){
WarenkorbItem item = getWarenkorbItem(produkteWarenkorb, addedProdukt)
item.setProduktAnzahl(item.getProduktAnzahl() + 1);
} else {
WarenkorbItem item = new WarenkorbItem();
item.setProdukt(addedProdukt);
item.setProduktAnzahl(1);
produkteWarenkorb.add(item);
}```
Den ganzen Schmarren mit isEqual und den zig verschiedenen durchnumerierten WarenkorbItems kann man sich dan getrost ersparen.
Das lässt sich wunderbar testen. Nutze einen Unittest und debugge das Problem. Dann wirst Du auch zukünftig bei Änderungen am Code sicher sein, dass alles noch so funktioniert, wie Du es gerne hättest.
Edit:
ein weiterer Tip:
Wenn Du den Unittest geschrieben hast, versuche doch einfach mal ein Hashset zu nutzen, wobei der Key Dein Produktname und der Value die Liste der Items (o.ä.) ist. Dann sollte der Code wesentlich verständlicher sein. (und lass das a vor aProdukt etc weg :))