Überarbeiten des Codes, beheben eines LogiksProblems
parent
bf029bd7bb
commit
77ed4e7b71
|
|
@ -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.
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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() {
|
||||
|
|
|
|||
Loading…
Reference in New Issue