Ü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
|
* wie das intern (Array + Größe) umgesetzt ist
|
||||||
Sag einfach Bescheid.
|
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 kundenName;
|
||||||
String Addresse;
|
String Addresse;
|
||||||
Warenkorb wk;
|
Warenkorb wk;
|
||||||
ArrayList<WarenkorbArtikel> warenkorb=wk.ÜbertrageArtikel() ;
|
ArrayList<WarenkorbArtikel> warenkorb ;
|
||||||
double Bruttopreis=0;
|
double Bruttopreis=0;
|
||||||
double versandkosten;
|
double versandkosten;
|
||||||
boolean bestellungBestätigt;
|
boolean bestellungBestätigt;
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,20 @@ import java.util.Scanner;
|
||||||
|
|
||||||
public class OnlineShop {
|
public class OnlineShop {
|
||||||
private static ArrayList<String> LagerList;
|
private static ArrayList<String> LagerList;
|
||||||
Warenkorb wk =new Warenkorb();
|
private ArrayList<Produkt> ProduktListe;
|
||||||
ArrayList<WarenkorbArtikel> Artikel= wk.ÜbertrageArtikel();
|
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();
|
LagerList=readFile();
|
||||||
String [][]arr= produktArray(LagerList);
|
String [][]arr= produktArray(LagerList);
|
||||||
return arr;
|
return arr;
|
||||||
|
|
@ -27,6 +37,7 @@ public class OnlineShop {
|
||||||
String[] Lager = new String[LagerList.size()];
|
String[] Lager = new String[LagerList.size()];
|
||||||
for (int i = 0; i < LagerList.size(); i++){
|
for (int i = 0; i < LagerList.size(); i++){
|
||||||
Lager[i] = LagerList.get(i);
|
Lager[i] = LagerList.get(i);
|
||||||
|
|
||||||
}
|
}
|
||||||
String[][] produktArray = new String[LagerList.size()][6];
|
String[][] produktArray = new String[LagerList.size()][6];
|
||||||
for(int i=0;i<Lager.length;i++) {
|
for(int i=0;i<Lager.length;i++) {
|
||||||
|
|
@ -41,6 +52,20 @@ public class OnlineShop {
|
||||||
|
|
||||||
return produktArray;
|
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) {
|
public static ArrayList<Produkt> erstelleListe(String[][] produktArray) {
|
||||||
ArrayList<Produkt> ProduktListe= new ArrayList<>();
|
ArrayList<Produkt> ProduktListe= new ArrayList<>();
|
||||||
|
|
@ -62,7 +87,6 @@ public class OnlineShop {
|
||||||
public ArrayList<Produkt> ÜbertrageListe() throws FileNotFoundException {
|
public ArrayList<Produkt> ÜbertrageListe() throws FileNotFoundException {
|
||||||
LagerList=readFile();
|
LagerList=readFile();
|
||||||
String [][]arr= produktArray(LagerList);
|
String [][]arr= produktArray(LagerList);
|
||||||
String[][] produktArray = Start();
|
|
||||||
ArrayList<Produkt>ProduktListe=erstelleListe(arr);
|
ArrayList<Produkt>ProduktListe=erstelleListe(arr);
|
||||||
|
|
||||||
return ProduktListe;
|
return ProduktListe;
|
||||||
|
|
@ -81,19 +105,12 @@ public class OnlineShop {
|
||||||
|
|
||||||
return LagerList;
|
return LagerList;
|
||||||
}
|
}
|
||||||
/*public boolean[] aufLager() throws FileNotFoundException { //TODO Prüfen ob ich die Methode überhaupt brauche, da bestand gereicht hat
|
public ArrayList<Produkt> getProduktListe() throws FileNotFoundException {//Durch KI verbessert (3)
|
||||||
ArrayList<Produkt> ProduktListe= ÜbertrageListe();
|
if(ProduktListe==null)
|
||||||
boolean[] aufLager= new boolean[ProduktListe.size()];
|
ProduktListe=ÜbertrageListe();
|
||||||
for(int i=0;i<ProduktListe.size();i++) {
|
return ProduktListe;
|
||||||
if(ProduktListe.get(i).Bestand >0)
|
}
|
||||||
aufLager[i]=true;
|
|
||||||
else
|
|
||||||
aufLager[i]=false;
|
|
||||||
}
|
|
||||||
return aufLager;
|
|
||||||
}*/
|
|
||||||
public Produkt suchProdukt(String suche) throws FileNotFoundException {
|
public Produkt suchProdukt(String suche) throws FileNotFoundException {
|
||||||
ArrayList<Produkt>ProduktListe= ÜbertrageListe();
|
|
||||||
for(Produkt p : ProduktListe){
|
for(Produkt p : ProduktListe){
|
||||||
if(p.name.equalsIgnoreCase(suche))
|
if(p.name.equalsIgnoreCase(suche))
|
||||||
return p;
|
return p;
|
||||||
|
|
@ -104,14 +121,17 @@ public class OnlineShop {
|
||||||
|
|
||||||
public Bestellungen bestellVorgang(String Name, String Addresse){
|
public Bestellungen bestellVorgang(String Name, String Addresse){
|
||||||
Bestellungen bestellung= new Bestellungen(Name, Addresse, Artikel );
|
Bestellungen bestellung= new Bestellungen(Name, Addresse, Artikel );
|
||||||
angepassterBestand();
|
ArrayList<WarenkorbArtikel> artikel =
|
||||||
|
new ArrayList<>(warenkorb.ÜbertrageArtikel());
|
||||||
Artikel.clear(); //Mit KI (2)
|
Artikel.clear(); //Mit KI (2)
|
||||||
|
|
||||||
return bestellung;
|
return bestellung;
|
||||||
}
|
}
|
||||||
public void angepassterBestand(){
|
public void angepassterBestand() throws FileNotFoundException {
|
||||||
|
|
||||||
for (int i=0;i<Artikel.size();i++){
|
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 {
|
public class Warenkorb {
|
||||||
|
|
||||||
private ArrayList<WarenkorbArtikel> Artikel;
|
private ArrayList<WarenkorbArtikel> Artikel;
|
||||||
|
private ArrayList<Produkt> produkte;
|
||||||
public Warenkorb() {
|
public Warenkorb(ArrayList<Produkt> produkte) {
|
||||||
|
this.produkte=produkte;
|
||||||
Artikel = new ArrayList<>();
|
Artikel = new ArrayList<>();
|
||||||
|
|
||||||
}
|
}
|
||||||
public Produkt welchesProdukt(int vltID) throws FileNotFoundException {
|
|
||||||
OnlineShop Shop = new OnlineShop();
|
public Produkt welchesProdukt(int vltID) {
|
||||||
ArrayList<Produkt> produkte = Shop.ÜbertrageListe();
|
|
||||||
|
|
||||||
for(Produkt p: produkte){
|
for(Produkt p: produkte){
|
||||||
if(p.ID==vltID){
|
if(p.ID==vltID){
|
||||||
|
|
@ -24,34 +23,39 @@ public class Warenkorb {
|
||||||
|
|
||||||
}return null;
|
}return null;
|
||||||
}
|
}
|
||||||
public boolean aufLager(Produkt p){
|
public boolean aufLager(Produkt p,int Menge){
|
||||||
if(p.Bestand>0)
|
if((p.Bestand-Menge)>=0)
|
||||||
return true;
|
return true;
|
||||||
else
|
else
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void produktHinzufügen(Produkt p,int Menge) {
|
public void produktHinzufügen(Produkt p,int Menge) throws FileNotFoundException {
|
||||||
for(int i=0;i<Artikel.size();i++){
|
for(int i=0;i<produkte.size();i++){
|
||||||
if(Artikel.get(i).produkt.ID==p.ID){
|
if(produkte.get(i).ID==p.ID){
|
||||||
int neu=Artikel.get(i).Menge+Menge;
|
produkte.get(i).Bestand-= Menge;
|
||||||
Artikel.get(i).Menge=neu;
|
for(int j=0;j<Artikel.size();j++){
|
||||||
Artikel.get(i).produkt.Bestand-= Menge;
|
if (p.ID==Artikel.get(j).produkt.ID){
|
||||||
if(Artikel.get(i).produkt.Bestand<0)
|
Artikel.get(j).produkt.Bestand+=Menge;
|
||||||
Artikel.get(i).produkt.Bestand=0;
|
} else
|
||||||
|
Artikel.add(new WarenkorbArtikel(p, Menge));
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
p.Bestand-=Menge;
|
|
||||||
Artikel.add(new WarenkorbArtikel(p, Menge));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public boolean ProduktDa (int ID,int Menge) throws FileNotFoundException {
|
public boolean ProduktDa (int ID,int Menge) throws FileNotFoundException {
|
||||||
Produkt da = welchesProdukt(ID);
|
Produkt da = welchesProdukt(ID);
|
||||||
if(da==null){
|
if(da==null){
|
||||||
return false;
|
return false;
|
||||||
} boolean genug=aufLager(da);
|
} boolean genug=aufLager(da,Menge);
|
||||||
if(genug==true){
|
if(genug==true){
|
||||||
produktHinzufügen(da,Menge);
|
produktHinzufügen(da,Menge);
|
||||||
return true;
|
return true;
|
||||||
|
|
|
||||||
|
|
@ -8,13 +8,16 @@ import java.util.Scanner;
|
||||||
|
|
||||||
public class ShopTUI {
|
public class ShopTUI {
|
||||||
private static OnlineShop shop;
|
private static OnlineShop shop;
|
||||||
|
private Warenkorb wk;
|
||||||
static Scanner sc = new Scanner(System.in);
|
static Scanner sc = new Scanner(System.in);
|
||||||
Warenkorb wk = new Warenkorb();
|
|
||||||
|
|
||||||
public void main(String[] args) throws FileNotFoundException {
|
public void main(String[] args) throws FileNotFoundException {
|
||||||
IO.println();
|
IO.println();
|
||||||
System.out.println(">>>>>>>>>>Willkommen zum DanDan-Shop!<<<<<<<<<<");
|
System.out.println(">>>>>>>>>>Willkommen zum DanDan-Shop!<<<<<<<<<<");
|
||||||
shop= new OnlineShop();
|
shop= new OnlineShop();
|
||||||
|
wk = new Warenkorb(shop.getProduktListe());
|
||||||
|
shop.setWarenkorb(wk);; //von KI(3)
|
||||||
boolean cont = true;
|
boolean cont = true;
|
||||||
|
|
||||||
while (cont) {
|
while (cont) {
|
||||||
|
|
@ -61,7 +64,7 @@ public class ShopTUI {
|
||||||
|
|
||||||
public static void produktangebot() throws FileNotFoundException {
|
public static void produktangebot() throws FileNotFoundException {
|
||||||
System.out.println("Unser Produktangebot:");
|
System.out.println("Unser Produktangebot:");
|
||||||
String[][] produkt = shop.Start();
|
String[][] produkt = shop.printArray();
|
||||||
|
|
||||||
IO.println();
|
IO.println();
|
||||||
for (int i = 0; i < produkt.length; i++) {
|
for (int i = 0; i < produkt.length; i++) {
|
||||||
|
|
@ -86,7 +89,7 @@ public class ShopTUI {
|
||||||
int count=0;
|
int count=0;
|
||||||
Produkt vlt=null;
|
Produkt vlt=null;
|
||||||
// boolean[] aufLager= shop.aufLager();
|
// boolean[] aufLager= shop.aufLager();
|
||||||
ArrayList<Produkt> ProduktListe= shop.ÜbertrageListe();
|
ArrayList<Produkt> ProduktListe= shop.getProduktListe();
|
||||||
IO.println();
|
IO.println();
|
||||||
Produkt gefunden= shop.suchProdukt(suche);
|
Produkt gefunden= shop.suchProdukt(suche);
|
||||||
if(gefunden==null) {
|
if(gefunden==null) {
|
||||||
|
|
@ -141,7 +144,7 @@ public class ShopTUI {
|
||||||
String Wahl;
|
String Wahl;
|
||||||
do {
|
do {
|
||||||
IO.println(">>Warenkorb-Menü<<");
|
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("2. Meinen Warenkorb anzeigen ");
|
||||||
IO.println("3. Etwas aus den Warenkorb löschen");
|
IO.println("3. Etwas aus den Warenkorb löschen");
|
||||||
IO.println("4. Die Menge reduzieren");
|
IO.println("4. Die Menge reduzieren");
|
||||||
|
|
@ -179,7 +182,7 @@ public class ShopTUI {
|
||||||
if(geklappt){
|
if(geklappt){
|
||||||
IO.println("Das Produkt wurde zum Warenkorb hinzugefügt!!");
|
IO.println("Das Produkt wurde zum Warenkorb hinzugefügt!!");
|
||||||
}else
|
}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() {
|
public void warenkorbAnzeigen() {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue