Überarbeiten des Codes, beheben eines LogiksProblems

main
Laura Kalkbrenner 2025-12-15 09:04:18 +01:00
parent bf029bd7bb
commit 77ed4e7b71
5 changed files with 130 additions and 44 deletions

View File

@ -230,3 +230,62 @@ Wenn du möchtest, erkläre ich dir auch:
* wie das intern (Array + Größe) umgesetzt ist
Sag einfach Bescheid.
(3) größere KI-Änderung, da ich garnicht weitergekommen bin und nicht verstanden habe , wie ich dafür sorge; dass es immer das selbe Objekt ist-------->
Das Hauptproblem in deinem Code:
Du hast eine Initialisierungsreihenfolge-Problem. Die Objekte werden in falscher Reihenfolge erstellt, was zu NullPointerExceptions führt. Außerdem arbeiten Warenkorb und OnlineShop mit unterschiedlichen Instanzen der Produkte.
Die kritischen Punkte:
ShopTUI.main(): Du versuchst wk mit shop.getProduktListe() zu erstellen, aber shop ist noch null.
OnlineShop.getProduktListe(): Diese Methode gibt einfach ProduktListe zurück, aber die ist oft null, weil sie nie durch ÜbertrageListe() geladen wurde.
Warenkorb.produktHinzufügen(): Hier wird der Bestand im falschen Objekt geändert. Du änderst eine Kopie, nicht das Original aus der produkte-Liste.
OnlineShop Konstruktor: warenkorb ist null, wenn auf Artikel zugegriffen wird.
Lösung - Was du ändern musst:
In ShopTUI.main() (muss die richtige Reihenfolge haben):
java
shop = new OnlineShop();
wk = new Warenkorb(shop.getProduktListe());
shop.setWarenkorb(wk);
In OnlineShop.getProduktListe() (Null-Prüfung hinzufügen):
In OnlineShop Konstruktor (Warenkorb erstellen):
java
warenkorb = new Warenkorb(ProduktListe);
Artikel = warenkorb.ÜbertrageArtikel();
In Bestellungen Klasse (Feld wk entfernen):
java
// Entferne: Warenkorb wk;
// Ändere: ArrayList<WarenkorbArtikel> warenkorb;
// Konstruktor: this.warenkorb = warenkorb;
Warum funktioniert der Bestand nicht?
Dein Warenkorb hat eine Liste von Produkten (produkte), aber wenn du produktHinzufügen aufrufst, änderst du den Bestand am falschen Objekt. Du musst das exakt gleiche Produkt-Objekt finden, das auch in der ProduktListe von OnlineShop ist, und dort den Bestand ändern.
ÜbertrageListe muss richtig laden:
Stelle sicher, dass ÜbertrageListe() tatsächlich die CSV-Datei liest und LagerList setzt. Wenn LagerList null ist, wird printArray() fehlschlagen.
Zusammenfassung:
Initialisierung in richtiger Reihenfolge: Shop → Produktliste → Warenkorb
getProduktListe() muss die Liste laden, wenn sie null ist
Bestandsänderungen müssen am Original-Objekt in der gemeinsamen Liste erfolgen
Alle Klassen müssen die gleichen Objekt-Instanzen verwenden, nicht Kopien
Das sind die minimalen Änderungen, die nötig sind, um deine NullPointerExceptions zu behegen und sicherzustellen, dass Bestandsänderungen sichtbar werden.

View File

@ -6,7 +6,7 @@ public class Bestellungen {
String kundenName;
String Addresse;
Warenkorb wk;
ArrayList<WarenkorbArtikel> warenkorb=wk.ÜbertrageArtikel() ;
ArrayList<WarenkorbArtikel> warenkorb ;
double Bruttopreis=0;
double versandkosten;
boolean bestellungBestätigt;

View File

@ -9,10 +9,20 @@ import java.util.Scanner;
public class OnlineShop {
private static ArrayList<String> LagerList;
Warenkorb wk =new Warenkorb();
ArrayList<WarenkorbArtikel> Artikel= wk.ÜbertrageArtikel();
private ArrayList<Produkt> ProduktListe;
ArrayList<WarenkorbArtikel> Artikel;
private Warenkorb warenkorb;
public String [][] Start() throws FileNotFoundException {
public OnlineShop() throws FileNotFoundException {
ProduktListe = getProduktListe();
warenkorb = new Warenkorb(ProduktListe);
Artikel = warenkorb.ÜbertrageArtikel();
}
public void setWarenkorb(Warenkorb wk) { //Von ki(3)
this.warenkorb = wk;
}
public String [][] Start() throws FileNotFoundException {
LagerList=readFile();
String [][]arr= produktArray(LagerList);
return arr;
@ -27,6 +37,7 @@ public class OnlineShop {
String[] Lager = new String[LagerList.size()];
for (int i = 0; i < LagerList.size(); i++){
Lager[i] = LagerList.get(i);
}
String[][] produktArray = new String[LagerList.size()][6];
for(int i=0;i<Lager.length;i++) {
@ -41,6 +52,20 @@ public class OnlineShop {
return produktArray;
}
public String[][] printArray() throws FileNotFoundException {
String [][] arr = produktArray(LagerList);
String[][] arrayForPrint = new String[arr.length][arr[0].length];
for(int i=0;i<arrayForPrint.length;i++){
for(int j=0;j<arrayForPrint[i].length;j++){
if(j== arr[i].length-1&& i>0){
arrayForPrint[i][j]= String.valueOf(ProduktListe.get(i-1).Bestand);
}else {
arrayForPrint[i][j]=arr[i][j];
}
}
}
return arrayForPrint;
}
public static ArrayList<Produkt> erstelleListe(String[][] produktArray) {
ArrayList<Produkt> ProduktListe= new ArrayList<>();
@ -62,7 +87,6 @@ public class OnlineShop {
public ArrayList<Produkt> ÜbertrageListe() throws FileNotFoundException {
LagerList=readFile();
String [][]arr= produktArray(LagerList);
String[][] produktArray = Start();
ArrayList<Produkt>ProduktListe=erstelleListe(arr);
return ProduktListe;
@ -81,19 +105,12 @@ public class OnlineShop {
return LagerList;
}
/*public boolean[] aufLager() throws FileNotFoundException { //TODO Prüfen ob ich die Methode überhaupt brauche, da bestand gereicht hat
ArrayList<Produkt> ProduktListe= ÜbertrageListe();
boolean[] aufLager= new boolean[ProduktListe.size()];
for(int i=0;i<ProduktListe.size();i++) {
if(ProduktListe.get(i).Bestand >0)
aufLager[i]=true;
else
aufLager[i]=false;
}
return aufLager;
}*/
public ArrayList<Produkt> getProduktListe() throws FileNotFoundException {//Durch KI verbessert (3)
if(ProduktListe==null)
ProduktListe=ÜbertrageListe();
return ProduktListe;
}
public Produkt suchProdukt(String suche) throws FileNotFoundException {
ArrayList<Produkt>ProduktListe= ÜbertrageListe();
for(Produkt p : ProduktListe){
if(p.name.equalsIgnoreCase(suche))
return p;
@ -104,14 +121,17 @@ public class OnlineShop {
public Bestellungen bestellVorgang(String Name, String Addresse){
Bestellungen bestellung= new Bestellungen(Name, Addresse, Artikel );
angepassterBestand();
ArrayList<WarenkorbArtikel> artikel =
new ArrayList<>(warenkorb.ÜbertrageArtikel());
Artikel.clear(); //Mit KI (2)
return bestellung;
}
public void angepassterBestand(){
public void angepassterBestand() throws FileNotFoundException {
for (int i=0;i<Artikel.size();i++){
Artikel.get(i).produkt.Bestand-= Artikel.get(i).Menge;
ProduktListe.get(i).Bestand-= Artikel.get(i).Menge;
}
}
}

View File

@ -7,15 +7,14 @@ import java.util.ArrayList;
public class Warenkorb {
private ArrayList<WarenkorbArtikel> Artikel;
public Warenkorb() {
private ArrayList<Produkt> produkte;
public Warenkorb(ArrayList<Produkt> produkte) {
this.produkte=produkte;
Artikel = new ArrayList<>();
}
public Produkt welchesProdukt(int vltID) throws FileNotFoundException {
OnlineShop Shop = new OnlineShop();
ArrayList<Produkt> produkte = Shop.ÜbertrageListe();
public Produkt welchesProdukt(int vltID) {
for(Produkt p: produkte){
if(p.ID==vltID){
@ -24,34 +23,39 @@ public class Warenkorb {
}return null;
}
public boolean aufLager(Produkt p){
if(p.Bestand>0)
public boolean aufLager(Produkt p,int Menge){
if((p.Bestand-Menge)>=0)
return true;
else
return false;
}
public void produktHinzufügen(Produkt p,int Menge) {
for(int i=0;i<Artikel.size();i++){
if(Artikel.get(i).produkt.ID==p.ID){
int neu=Artikel.get(i).Menge+Menge;
Artikel.get(i).Menge=neu;
Artikel.get(i).produkt.Bestand-= Menge;
if(Artikel.get(i).produkt.Bestand<0)
Artikel.get(i).produkt.Bestand=0;
public void produktHinzufügen(Produkt p,int Menge) throws FileNotFoundException {
for(int i=0;i<produkte.size();i++){
if(produkte.get(i).ID==p.ID){
produkte.get(i).Bestand-= Menge;
for(int j=0;j<Artikel.size();j++){
if (p.ID==Artikel.get(j).produkt.ID){
Artikel.get(j).produkt.Bestand+=Menge;
} else
Artikel.add(new WarenkorbArtikel(p, Menge));
}
return;
}
}
p.Bestand-=Menge;
Artikel.add(new WarenkorbArtikel(p, Menge));
}
public boolean ProduktDa (int ID,int Menge) throws FileNotFoundException {
Produkt da = welchesProdukt(ID);
if(da==null){
return false;
} boolean genug=aufLager(da);
} boolean genug=aufLager(da,Menge);
if(genug==true){
produktHinzufügen(da,Menge);
return true;

View File

@ -8,13 +8,16 @@ import java.util.Scanner;
public class ShopTUI {
private static OnlineShop shop;
private Warenkorb wk;
static Scanner sc = new Scanner(System.in);
Warenkorb wk = new Warenkorb();
public void main(String[] args) throws FileNotFoundException {
IO.println();
System.out.println(">>>>>>>>>>Willkommen zum DanDan-Shop!<<<<<<<<<<");
shop= new OnlineShop();
wk = new Warenkorb(shop.getProduktListe());
shop.setWarenkorb(wk);; //von KI(3)
boolean cont = true;
while (cont) {
@ -61,7 +64,7 @@ public class ShopTUI {
public static void produktangebot() throws FileNotFoundException {
System.out.println("Unser Produktangebot:");
String[][] produkt = shop.Start();
String[][] produkt = shop.printArray();
IO.println();
for (int i = 0; i < produkt.length; i++) {
@ -86,7 +89,7 @@ public class ShopTUI {
int count=0;
Produkt vlt=null;
// boolean[] aufLager= shop.aufLager();
ArrayList<Produkt> ProduktListe= shop.ÜbertrageListe();
ArrayList<Produkt> ProduktListe= shop.getProduktListe();
IO.println();
Produkt gefunden= shop.suchProdukt(suche);
if(gefunden==null) {
@ -141,7 +144,7 @@ public class ShopTUI {
String Wahl;
do {
IO.println(">>Warenkorb-Menü<<");
IO.println("1. Artikel hinzüfugen [Bitte hierfür am besten die Produkt ID benutzen!]");
IO.println("1. Artikel hinzüfugen [Bitte hierfür die Produkt ID benutzen!]");
IO.println("2. Meinen Warenkorb anzeigen ");
IO.println("3. Etwas aus den Warenkorb löschen");
IO.println("4. Die Menge reduzieren");
@ -179,7 +182,7 @@ public class ShopTUI {
if(geklappt){
IO.println("Das Produkt wurde zum Warenkorb hinzugefügt!!");
}else
IO.println("Die ID existiert nicht oder das Produkt ist leider nicht auf Lager");
IO.println("Die ID existiert nicht oder das Produkt ist leider nicht in der Menge auf Lager");
}
public void warenkorbAnzeigen() {