Java Kassen Programm

Hallo,

ich bin Java Neuling und versuche gerade ein Kassenprogramm zu schreiben. Leider hakt es bei mir bei den Arrays. Ich habe eine CSV-Datei mit verschiedenen Daten (Artikelnummer, Artikelbezeichnung und Preis) in jeder Zeile. Nun möchte ich das so gestalten, dass ich die Artikelnummer eingebe und mir die dementsprechende Zeile ausgegeben wird. Leider komme ich da nicht weiter.

Hier der letzte Ansatz:

Code:
public class Einzelhandelskasse {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // Einlesen der CSV-Dtaei
        String[] artikel = null;
        String[] artikelfuerliste = null;
        String[] artikelarray = null;
        // Anderer Ansatz (zu 4): ArrayList<String> lines;
        ArrayList<String> meineArtikelListe = new ArrayList();
        
        // Ansatz 4 - Start
        String csvFileToRead = "D:/Studium/Informatik/eclipse projekte/Kassenprogramm/src/artikel.csv";
        BufferedReader br = null;
        String line = "";
        String splitBy = ",";

         try {  
              
               br = new BufferedReader(new FileReader(csvFileToRead));  
               while ((line = br.readLine()) != null) {  
              
                artikel = line.split(splitBy);
                artikelfuerliste = line.split(splitBy);
                
                // Aufbau Arraylist
                //meineArtikelListe.add(artikelfuerliste);
                
                System.out.println("Artikel [Artikelnummer = " + artikel[0] + " , Artikelbezeichnung = "  
                  + artikel[1] + " , Preis = " + artikel[2] + "]");
               }  
              
              } catch (FileNotFoundException e) {  
               e.printStackTrace();  
              } catch (IOException e) {  
               e.printStackTrace();  
              } finally {  
               if (br != null) {  
                try {  
                 br.close();  
                } catch (IOException e) {  
                 e.printStackTrace();  
                }  
               }  
              }  
              
              System.out.println("CSV erfolgreich eingelesen");  
              
              System.out.println("Artikel:" + artikel[0]);
Lasse ich das Programm laufen und gebe eine der Artikelnummern ein, wird mir immer nur die letzte Zeile der CSV-Datei, also der letzte Artikel, angezeigt. Wie kann ich dieses Problem lösen?
 
Zuletzt bearbeitet von einem Moderator:
Mehrere Sachen fallen mir hier auf:
1. Verwende keine Strings, sondern dedizierte Objekte, z.B. die Klasse Artikel welche alle Informationen enthält um einen Artikel zu beschreiben.
2. Benutzte wenn möglich keine Schleifen innerhalb von Try-Catch-Blöcken.

Punkt 2. sorgt für eine schönere Struktur und Exceptionhandling und die Informationen welche die JVM vorhalten muss um einen Roll-Back(im Falle einer Exception durchzuführen) sind geringer.

Punkt 1. erlaubt dir dein eigentliches Problem zu lösen.
Du kannst dann einfach über den Array laufen und ein einzelnes Attribut abfragen.
Gruß

Fluffy

P.s.:
Ich würde auch keine Arrays verwenden sondern Listen, die sind dynamisch und in ihrer Größe nicht begrenzt, und du musst nicht per hand Memory-Management betreiben.
 
Du musst dir für die Tabelle, die dir im csv-Format vorliegt, eine Datenstruktur überlegen. Ich würde dafür ein Liste oder eine Hashmap benutzen. Kommt darauf an, wieviele Daten du verarbeiten möchtest.

Als Schlüssel würde ich die Artikelnummer wählen, da diese eindeutig sein dürfte und die Werte in einem String-Array speichern.

Code:
//anlegen
Map<String, String[]> artikel = new HashMap<String, String[]>();
//ablegen
artikel.put(csv1_1, [csv1_2, csv1_3]);
//auslesen
if artikel.containsKey(artikel_nummer){
  artikel_xy = artikel.get(artikel_nummer);
}

Weiterhin kannst du, wie Fluffy vorgeschlagen hat, den Artikel nicht mehr im String-Array speichern, sondern dafür eine eigene Klasse Artikel anlegen. Wenn du diese geschickt konstruierst, kannst du auf die Hashmap verzichten, aber das überlasse ich dir. ;)
 
Danke für deine Hilfe. Ein Kumpel hat sich dessen mittlerweile angenommen und wir sind dabei das Ganze mit einer Klasse und ArrayList zu gestalten. Werde es mal posten, wenn der Teil fertig ist.
 
Zurück
Oben