Klassen und methoden

arhzz

Bekanntes Mitglied
Hallo Leute! Ich brauche ein bisschen hilfe mit meinem Code. Nämlich soll ich Interfaces Klassen usw.. verwenden um so ein Shop Programm zu machen. Ich habe einen Teil der Aufgabe gemacht aber jetzt bin ich nicht sicher wie es weiter geht.
Java:
class Warehouse extends Merchandise {
    private static final String DATABASE = "warehouse.csv";
    final Merchandise [] merchandise;
    
    Warehouse(Merchandise[] merchandise) {
        this.merchandise = merchandise;
    }
    
    static Warehouse fromCSV(String DATABASE) {
        In.open(DATABASE);
        
        if(!In.done()) {
            Out.println("File cannot be read");
            
        }
        
        String file = In.readFile();
        In.close();
        
        String[] lines = file.split("\n");
        for (String line : lines) {
            String[] parts = line.split(",");
            
          for(String part : parts) {
              double value = Double.parseDouble(part);
          }
        }
    }
        
    
    public Merchandise findMerchandise(String name) {
    
    }
}

Also hier soll ich in dieser "Merchandise" Klasse aus einem file Daten einlesen und sie mit double parse(es stehst so in der Angabe mindentens) umwandeln. Aber die datei hat auch Worter(Instrument,Piano....) und ich weiss nich ob diese methode nur Ziffer nehmt und sie umwandelt. Und noch soll ich mit dieser findMerchandise methode den ersten Wareneintrag in der Datenbank zurück liefern beidem der Artikelname dem Parameter name entspricht.Ein bisschen hilfe wäre super,Danke!

LG
 

krgewb

Top Contributor
Du kannst abfragen, ob es zu Double geparst werden kann. Setze es einfach in einen try-Block.

Verstehst du CSV? Eine CSV-Datei ist wie eine Tabelle. Es gibt Spaltenüberschriften und Werte. Falls die Datei keine Überschriften hat, müssen die Informationen darüber wenigstens in der Aufgabenstellung stehen.
 

MoxxiManagarm

Top Contributor
Also hier soll ich in dieser "Merchandise" Klasse aus einem file Daten einlesen und sie mit double parse(es stehst so in der Angabe mindentens) umwandeln.
Das macht so alles keinen Sinn, zeig mal die Aufgabenstellung, eventuell verrennst du dich ein wenig. Ein CSV hat theoretisch in jeder Zeile einen Merchandise Artikel. Die Attribute eines solches Artikels sind durch die Kommas getrennt. Du musst also die Attribute dann verwenden um einen solchen Artikel zu erstellen. Die Position der Attribute ist in jeder Zeile gleich, also der Name des Merchandise steht beispielsweise immer am Anfang der Zeile und der Preis an zweiter Stelle. Ich gehe davon aus, dass der Artikel Attribute vom typ double besitzt, beispielsweise eben ein solcher Preis. Die double Attribute musst du mit Hilfe von parse vom eingelesenen String in ein double umwandeln.
 

arhzz

Bekanntes Mitglied
Du kannst abfragen, ob es zu Double geparst werden kann. Setze es einfach in einen try-Block.

Verstehst du CSV? Eine CSV-Datei ist wie eine Tabelle. Es gibt Spaltenüberschriften und Werte. Falls die Datei keine Überschriften hat, müssen die Informationen darüber wenigstens in der Aufgabenstellung stehen.
Ja das mit try und catch haben wir nicht gemacht,also dass muss leider ausfallen
 

arhzz

Bekanntes Mitglied
Das extends ist übrigens an der Stelle mit Sicherheit fachlich falsch. Ein Warenhaus ist kein Merchandise.
Das macht so alles keinen Sinn, zeig mal die Aufgabenstellung, eventuell verrennst du dich ein wenig. Ein CSV hat theoretisch in jeder Zeile einen Merchandise Artikel. Die Attribute eines solches Artikels sind durch die Kommas getrennt. Du musst also die Attribute dann verwenden um einen solchen Artikel zu erstellen. Die Position der Attribute ist in jeder Zeile gleich, also der Name des Merchandise steht beispielsweise immer am Anfang der Zeile und der Preis an zweiter Stelle. Ich gehe davon aus, dass der Artikel Attribute vom typ double besitzt, beispielsweise eben ein solcher Preis. Die double Attribute musst du mit Hilfe von parse vom eingelesenen String in ein double umwandeln.
Also ja ich verwire mich ein bisschen, das mit CSV haben wir überhaupt nicht gemacht es würde uns nur ein beispiel gegeben


Java:
public class ReadWarehouse {

    private static final String DATABASE_PATH = "warehouse.csv";

    public static void main(String[] args) {
        In.open(DATABASE_PATH);

        // Test if open succeeded
        if (!In.done()) {
            System.out.println("Could not read '" + DATABASE_PATH + "'!");
            // just return out of main
            // System.exit(0); is kinda hacky
            return;
        }

        // read entire file
        String file = In.readFile();
        // close In file, since we do not need it any longer
        In.close();

        // Split file on new-line character \n
        String[] lines = file.split("\n");
        // Iterate over all lines
        for (String line : lines) {
            // Split each line on ","
            String[] parts = line.split(",");
            // Iterate over parts
            // Here you can then do some parsing for the assignment

            // just printing the values as demonstration
            // TODO replace for-loop with actual parsing needed for exercise
            for (String part : parts) {
                System.out.println(part);
            }
            // just some spacing
            // TODO remove for assignment of course
            System.out.println();
            System.out.println();
        }
    }
}
Die Datei in der CSV sehen so aus:
accessory,Cory Piano Polish,75.90,Super High Gloss Polish,Apply in small amounts,300 instrument,Kawai CN-39 R,1645,Beginner Piano,54,15 instrument,Yamaha YUS 1,10990,Intermediate Piano,228,8 instrument,Steinway & Sons 0-180,32555,Advanced Piano,280,4

Und die Aufgabe stellung sieht so aus;
 

Anhänge

  • aufgabe .png
    aufgabe .png
    249 KB · Aufrufe: 14

MoxxiManagarm

Top Contributor
Ich habe dir mal ein kleines Beispiel zusammengeschraubt, es ist äußerst quick&dirty, also hat kein Fehlerhandling. Aber da ihr das anscheinend auch noch nicht hattet könnt ihr sicher davon ausgehen, dass die Daten alle sauber sind.

Java:
// GemueseStand.java
public class GemueseStand {
    public static String INVENTAR_CSV_CONTENT = "Gurke;0.99;Bayern;50\n" +
            "Paprika;0.59;Thüringen;33\n" +
            "Kohlrabi;1.49;Sachsen;9\n";

    private List<Gemuese> gemueseList = new ArrayList<>();

    private GemueseStand() { }

    public static GemueseStand fromInventarCsv (String inventar) {
        GemueseStand gemueseStand = new GemueseStand();

        String[] gemueseBestaende = inventar.split("\\n");
        for (String gemueseBestand : gemueseBestaende) {
            String[] gemueseDaten = gemueseBestand.split(";");

            String name = gemueseDaten[0];
            double preis = Double.parseDouble(gemueseDaten[1]);
            String herkunft = gemueseDaten[2];
            int menge = Integer.parseInt(gemueseDaten[3]);

            gemueseStand.gemueseList.add(new Gemuese(name, preis, herkunft, menge));
        }

        return gemueseStand;
    }

    public List<Gemuese> getGemueseList() {
        return gemueseList;
    }

    public static void main(String... args) {
        GemueseStand gemueseStand = GemueseStand.fromInventarCsv(INVENTAR_CSV_CONTENT);
        gemueseStand.getGemueseList().forEach(System.out::println);
    }
}

// Gemuese.java
public class Gemuese {
    private String name;
    private double preisProStueckInEuro;
    private String herkunft;
    private int menge;

    public Gemuese(String name, double preisProStueckInEuro, String herkunft, int menge) {
        this.name = name;
        this.preisProStueckInEuro = preisProStueckInEuro;
        this.herkunft = herkunft;
        this.menge = menge;
    }

    @Override
    public String toString() {
        return "Gemuese{" +
                "name='" + name + '\'' +
                ", preisProStueckInEuro=" + preisProStueckInEuro +
                ", herkunft='" + herkunft + '\'' +
                ", menge=" + menge +
                '}';
    }
}

Ausgabe:

Code:
Gemuese{name='Gurke', preisProStueckInEuro=0.99, herkunft='Bayern', menge=50}
Gemuese{name='Paprika', preisProStueckInEuro=0.59, herkunft='Thüringen', menge=33}
Gemuese{name='Kohlrabi', preisProStueckInEuro=1.49, herkunft='Sachsen', menge=9}
 

temi

Top Contributor
Ich würde allerdings noch die "magic values" eliminieren und durch Konstanten ersetzen.
Java:
// GemueseStand.java
public class GemueseStand {
    
    private final static int SPALTE_NAME = 0;
    private final static int SPALTE_PREIS = 1;
    private final static int SPALTE_HERKUNFT = 2;
    private final static int SPALTE_MENGE = 3;
    
    // ...

    public static GemueseStand fromInventarCsv (String inventar) {
        GemueseStand gemueseStand = new GemueseStand();

        String[] gemueseBestaende = inventar.split("\\n");
        for (String gemueseBestand : gemueseBestaende) {
            String[] gemueseDaten = gemueseBestand.split(";");

            String name = gemueseDaten[SPALTE_NAME];
            double preis = Double.parseDouble(gemueseDaten[SPALTE_PREIS]);
            String herkunft = gemueseDaten[SPALTE_HERKUNFT];
            int menge = Integer.parseInt(gemueseDaten[SPALTE_MENGE]);

            gemueseStand.gemueseList.add(new Gemuese(name, preis, herkunft, menge));
        }

        return gemueseStand;
    }
    
    // ...
}
 

arhzz

Bekanntes Mitglied
Java:
class Warehouse {
    private final Merchandise[] merchandise;
    
    Warehouse(Merchandise[] merchandise) {
        this.merchandise = merchandise;
    }
    
    public static Warehouse fromCsv(String file) {
        In.open(file);
        String material = In.readFile();
        In.close();
        
        String lines[] = material.split("\n");
        Merchandise[] merchandise = new Merchandise[lines.length];
        for(int i=0; i<merchandise.length; i++) {
            String[] parts = lines[i].split(",");
            
            
        Article article = null;
        if(parts[0].equals("instrument")) {
            article = new Instrument(parts[1],Double.parseDouble(parts[2]),parts[3],Integer.parseInt(parts[4]));
        }else{
            article = new Accessory(parts[1],Double.parseDouble(parts[2]),parts[3],parts[4]);
        }
        merchandise[i] = new Merchandise(article,Integer.parseInt(parts[5]));
        }
        return new Warehouse(merchandise);
    }
    
    public Merchandise[] getMerchandise() {
        return merchandise.clone();
    }
    
    public Merchandise findMerchandise(String name) {
        Merchandise found = null;
        for(Merchandise the : merchandise) {
            if(the.getArticle().getName().equals(name)) {
                found = the;
                break;
            }
        }
        return found;
    }
        
}

class Shop {
    private final Warehouse warehouse;
    
    Shop(Warehouse warehouse){
        this.warehouse = warehouse;
    }
    
    public void printCatalog() {
        Out.println();
        Out.formatln("%-30s%20s%10s", "Name" , "Price","Quantity");
        String format = "%-30s%20.2f%10d";
        for(Merchandise the : warehouse.getMerchandise()) {
         Out.formatln(format,the.getArticle().getName(),the.getArticle().getPrice(),the.getQuantity());
         } 
    }
    
    public void printProductDescription(String name){
        Merchandise merchandise = warehouse.findMerchandise(name);
        
        Out.println();
        if(merchandise != null) {
            Out.println(merchandise);
        }else {
            Out.println("The article does not exist");
            Out.println();
        }
    }
}

class Main {
    public static void main(String[] args) {
        Warehouse warehouse = Warehouse.fromCsv("warehouse.csv");
        Shop shop = new Shop(warehouse);
        
        while(true) {
            Out.println("Pianos & more");
            Out.println("0. Print Catalogue");
            Out.println("1. Search Article");
            Out.println();
            Out.print("Selection:");
            int selection = In.readInt();
            In.read();
            
            
            switch(selection) {
                case 0:
                shop.printCatalog();
                break;
                case 1:
                Out.print("Article name:");
                String name = In.readLine();
                shop.printProductDescription(name);
                break;
                default:
                Out.println("Invalid selection");
            }
        }
    }
}
Hey Leute,danke für eure hilfe, es hat mir sehr geholfen.Nämlich habe ich die Aufgabe Teilweise geschafft. Ein Teil wo ich ein Catalog raus geben muss funktionier, aber wenn ich einen Artikel suchen muss gibt er immer "article doesnt exists" obwohl es funktionieren soll. Was mache ich falsch?
 

MoxxiManagarm

Top Contributor
Was mache ich falsch
Ich kann ganz spontan erstmal nichts falsches sehen (was nicht heißt dass ich eventuell auch was übersehe). Aber ich hatte das selbst schonmal - der Vergleich eines Strings von der Konsole mit eingelesenen String aus Datei ist fehlgeschlagen. Bei mir war es damals ein encoding-Problem. String können unterschiedlich sein, auch wenn sie gleich aussehen. Du könntest dir mal die charCodes vor dem vergleichen als Debug-Möglichkeit anschauen
 

LimDul

Top Contributor
Der Code sieht soweit richtig aus. Ich sehe auch nicht, was du falsch machst.

Entweder ist in den Ableitungen von Article (Instrument/Accessory) was in getName falsch. Oder der eingelesene String enthält noch den Zeilenumbruch vom readInt vorher (ich arbeite so selten mit dem Scanner). gibt mal den eingegeben Namen mit aus, das hilft evtl.
 

arhzz

Bekanntes Mitglied
Ich kann ganz spontan erstmal nichts falsches sehen (was nicht heißt dass ich eventuell auch was übersehe). Aber ich hatte das selbst schonmal - der Vergleich eines Strings von der Konsole mit eingelesenen String aus Datei ist fehlgeschlagen. Bei mir war es damals ein encoding-Problem. String können unterschiedlich sein, auch wenn sie gleich aussehen. Du könntest dir mal die charCodes vor dem vergleichen als Debug-Möglichkeit anschauen
Hmmm okay Ich sehe was ich tun kann.

EDIT: Auch die methode "getMerchandise" wo ich .clone verwende. Könnte das ohne die .clone methode funktioniren? Wann ja dann wie? Danke!
 
Zuletzt bearbeitet:

arhzz

Bekanntes Mitglied
Der Code sieht soweit richtig aus. Ich sehe auch nicht, was du falsch machst.

Entweder ist in den Ableitungen von Article (Instrument/Accessory) was in getName falsch. Oder der eingelesene String enthält noch den Zeilenumbruch vom readInt vorher (ich arbeite so selten mit dem Scanner). gibt mal den eingegeben Namen mit aus, das hilft evtl.
Ja genau dass wars, ich habe meine Input methode geandert und es funktioniert jetzt. Danke dir!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
MoxMorris Einige Methoden aus verschiedenen Klassen nacheinander auszuführen läuft seltsam Java Basics - Anfänger-Themen 2
I Gleiche Klassen und Methoden in unterschiedlichen Projekten nutzen Java Basics - Anfänger-Themen 2
N Klassen Methoden anderer Klassen aufrufen Java Basics - Anfänger-Themen 4
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
M Andere Methoden in anderen Klassen aufrufen Java Basics - Anfänger-Themen 11
L Methoden in anderen Klassen nutzen Java Basics - Anfänger-Themen 6
C Fernseher-Aufgabe (Methoden, Klassen und Objekte) Java Basics - Anfänger-Themen 63
H Methoden in großen Klassen gruppieren oder auslagern? Java Basics - Anfänger-Themen 10
A Bankweverwaltung mit Klassen und Methoden Java Basics - Anfänger-Themen 14
M Aufsplitten von Methoden in andere Klassen Java Basics - Anfänger-Themen 2
Curtis_MC Parameter-Übergabe bei Klassen und Methoden Java Basics - Anfänger-Themen 12
C Methoden/Klassen Übergabewerte Java Basics - Anfänger-Themen 8
C Java Klassen/Methoden/Übergabeparameter Java Basics - Anfänger-Themen 4
C Methoden Auf Methoden anderer Klassen zugreifen Java Basics - Anfänger-Themen 10
J Teile der Funktionalität von Klassen in Methoden platzieren. Java Basics - Anfänger-Themen 3
M Methoden (in Klassen) Java Basics - Anfänger-Themen 4
J Klassen Variablen in andere Klassen oder Methoden übernehmen Java Basics - Anfänger-Themen 1
arjoopy Methoden Methoden anderer Klassen Java Basics - Anfänger-Themen 6
L Klassen - Getter & Setter Methoden Java Basics - Anfänger-Themen 2
T Wie finde ich passende Java Klassen & Methoden? Java Basics - Anfänger-Themen 4
E Erste Schritte Gute Erklärung zu Objekten / Klassen / Methoden / Sichtbarkeiten auf Deutsch Java Basics - Anfänger-Themen 3
R Anfängerfrage zu Methoden in Vererbte Klassen Java Basics - Anfänger-Themen 2
C Methoden aus Klassen anzeigen lassen Java Basics - Anfänger-Themen 14
B Übungsaufgabe zu Klassen, Methoden ... Java Basics - Anfänger-Themen 2
K Methoden als Klassen benutzen Java Basics - Anfänger-Themen 42
K Vererbung Methoden in klassen auslagern und in mehreren Klassen verfügbar machen Java Basics - Anfänger-Themen 8
Pentalon Eclipse JUNO keine Vorschläge von Methoden bzw. Interfaces der eigenen Klassen Java Basics - Anfänger-Themen 5
B Klassen Java Taschenrechner mit Klassen und Methoden Java Basics - Anfänger-Themen 12
staxx6 ArrayList Methoden aufrufen bestimmter Klassen Java Basics - Anfänger-Themen 4
J Problem mit Klassen und Methoden Java Basics - Anfänger-Themen 7
W Kontenverwaltungssystem (Klassen, Methoden) Java Basics - Anfänger-Themen 3
F Interface Unterschied von Attributen und Methoden bei abstrakten Klassen und Interfaces Java Basics - Anfänger-Themen 5
H Klassen und Methoden Java Basics - Anfänger-Themen 12
D Kapselung Methoden anderer Klassen aufrufen Java Basics - Anfänger-Themen 7
A Klassen Methoden... Java Basics - Anfänger-Themen 15
I Objekte an andere Klassen/Methoden übergeben? Java Basics - Anfänger-Themen 5
T Vererbung und Zugriff auf Methoden von abgeleiteten Klassen Java Basics - Anfänger-Themen 2
T Kapselung: public-Methoden in protected-Klassen Java Basics - Anfänger-Themen 3
T OOP abstrakte klassen - methoden Java Basics - Anfänger-Themen 8
T Klassen, Objekte, Methoden Java Basics - Anfänger-Themen 9
U 2 Klassen mit get und set Methoden Java Basics - Anfänger-Themen 11
F Stilfrage: Klassen & Methoden Java Basics - Anfänger-Themen 15
V OOP Klassen Methoden Rückgabewert Java Basics - Anfänger-Themen 15
V OOP Klassen Methoden Java Basics - Anfänger-Themen 2
J Verständniss Frage zu Klassen, Objekte und Methoden Java Basics - Anfänger-Themen 8
L Methoden von anderen Klassen Aufrufen Java Basics - Anfänger-Themen 5
J Methoden/Klassen Problem Java Basics - Anfänger-Themen 9
E 2 Klassen - Problem bei Methoden Java Basics - Anfänger-Themen 22
F Auf Methoden anderer Klassen zugreifen? Java Basics - Anfänger-Themen 8
G Abstrakte Klassen und Methoden Java Basics - Anfänger-Themen 3
D In Gui auf Methoden anderer Klassen zugreifen Java Basics - Anfänger-Themen 2
U Methoden aus Programmfremden Klassen nutzen Java Basics - Anfänger-Themen 2
M Klassen/Methoden API Java Basics - Anfänger-Themen 6
G ArraylList aus Klassen --> Methoden der Klassen aufrufen Java Basics - Anfänger-Themen 3
T Funktionen Plotter - Klassen/Methoden/Funktionen Java Basics - Anfänger-Themen 13
H Wie kann ich auf Methoden von anderen Klassen zugreifen? Java Basics - Anfänger-Themen 1
M Methoden von Klassen aufrufen Java Basics - Anfänger-Themen 4
A Methoden von externen Klassen aufrufen Java Basics - Anfänger-Themen 3
G Übertragen von Variablen auf andere klassen oder Methoden Java Basics - Anfänger-Themen 2
J Methoden aus fremden Klassen verwenden Java Basics - Anfänger-Themen 6
T Mehrere paint Methoden in unterschiedlichen Klassen Java Basics - Anfänger-Themen 7
K Methoden Klassen Bsp. Bankkonto Java Basics - Anfänger-Themen 4
M Klassen/Methoden Java Basics - Anfänger-Themen 10
L Zusammenhang Methoden, Klassen, Objekte, static - sun doku Java Basics - Anfänger-Themen 4
C Methoden von verschieden Klassen in eine Klasse reinpacken? Java Basics - Anfänger-Themen 4
T Methoden / Klassen Problem Java Basics - Anfänger-Themen 11
G Methoden/Klassen elementare Probleme Java Basics - Anfänger-Themen 3
E Synchronized - Methoden in verschied. Klassen Java Basics - Anfänger-Themen 3
G dringende frage zu klassen und methoden ( klassendiagramm) Java Basics - Anfänger-Themen 19
L Klassen/Methoden/Objekt/Vererbung Java Basics - Anfänger-Themen 6
frau-u Problem mit Klassen und Vererbung - benutzen von Methoden Java Basics - Anfänger-Themen 2
L Klassen und Methoden für Dateivergleiche. Java Basics - Anfänger-Themen 4
G Was sind Klassen, Objekte und Methoden? Java Basics - Anfänger-Themen 3
H Methoden aus anderen Klassen aufrufen Java Basics - Anfänger-Themen 3
K klassen/methoden Java Basics - Anfänger-Themen 4
M Zugriff auf Klassen/Methoden im Hauptverzeichnis Java Basics - Anfänger-Themen 2
J Methodenaufrufe abstrakte Klassen, Interfaces Java Basics - Anfänger-Themen 17
M Abstrakte Klassen - Notation Java Basics - Anfänger-Themen 9
Detlef Bosau Nachladen von Klassen zur Laufzeit Java Basics - Anfänger-Themen 24
M Anonyme Klassen - Warum wird in der Konsole nichts ausgegeben? Java Basics - Anfänger-Themen 1
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
I 2 verschiedene Klassen mit gleichen Property vergleichen Java Basics - Anfänger-Themen 13
C Array von Klassen Java Basics - Anfänger-Themen 2
monsterherz 2 Klassen daher Probs mit dem Dateinamen Java Basics - Anfänger-Themen 9
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 9
I JPA Query für mehrere Klassen Java Basics - Anfänger-Themen 3
I @Entity Klassen, Service Beans etc. aus einem Share Projekt beziehen? Java Basics - Anfänger-Themen 26
S IntelliJ geht alle Klassen durch Java Basics - Anfänger-Themen 9
T variablen klassen übergreifend Java Basics - Anfänger-Themen 12
D Klassen Klassen Kommunikation Java Basics - Anfänger-Themen 12
Encera Auf Objekte aus anderer Klassen zugreifen Java Basics - Anfänger-Themen 20
D Klassen und Vererbung Java Basics - Anfänger-Themen 2
L Best Practice Annotierte Klassen im Classpath herausfinden Java Basics - Anfänger-Themen 1
P Mit dem Scanner Klassen aufrufen Java Basics - Anfänger-Themen 3
O Klassen Zusammenspiel zwischen 2 Klassen Java Basics - Anfänger-Themen 1
K Zweite Ausgabe von vererbten Klassen Java Basics - Anfänger-Themen 3
M Wie können Klassen nicht-materialisierte Attribute haben, die nur über get/ set-Mehoden simuliert sind? Java Basics - Anfänger-Themen 6
Speedrunner klassen aufrufen Java Basics - Anfänger-Themen 41
M Log4J (v2) nachträglich in allen Klassen hinzufügen Java Basics - Anfänger-Themen 9
D importieren eigener Klassen Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben