Konstruktor richtig implementiert? Frage zu Benutzereingaben...

Funktionierdochmal

Bekanntes Mitglied
Hi!
im Hauptprogramm kann der Benutzer so viele Rechnung anlegen, bis er "" eingibt. Aber mein Konstruktor hat keine Parameter und wie kann ich abhängig von der Häufigkeit aller Benutzereingaben, ständig neue "rechnungen" erstellen?
Zum Verständnis habe ich unten den Teil markiert.
Meine Klassen Rechnung und Kasse (Hauptprogramm):
Java:
package kasse;
import java.util.*;



public class Kasse {
    private static LinkedList<Rechnung> rechnungen;
    private static Warenlager<Ware> lager;
   
   
    public static void main(String[] args) {
       
        Scanner scan = new Scanner(System.in);
        boolean weiter = true;
        do {
            System.out.println("R: Lege neue Rechnung an.");
            System.out.println("Z: Gibt alle gespeicherten Rechnungen mit "
                + "Datum und Preis aus.");
            System.out.println("W: Fuege neue Ware zum Lager hinzu.");
            System.out.println("A: Gibt alle gespeicherten Waren im "
                + "Lager aus.");
            System.out.println("E: Das Programm wird beendet.");
            String auswahl = scan.nextLine();
            if (auswahl.equals("R")) {
                do {
                rechnungen.add(new Rechnung());
                } while()
Java:
package kasse;
import java.util.*;
import java.text.SimpleDateFormat;

public class Rechnung {
     
    private LinkedList<Ware> waren;
    private String datum;
   
    Scanner scan = new Scanner (System.in);
     
    SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd-MM-yyyy");
     String date = DATE_FORMAT.format(datum);


    public Rechnung () {
        datum = date;
        waren = new LinkedList<Ware>();
       
       
    }
   
   
    public void addWare(Ware ware) {
       
        if (ware == null) {
            throw new IllegalArgumentException("Eingabe ist fehlerhaft!");
           
        } else {
            waren.add(ware);
        }
       
    }
   
    public double getPreis() {
        double summe = 0;
        for(Ware w: waren) {
            summe += w.getEinzelPreis();
        }
        return summe;
    }
   
   
   
    public String toString() {

        for (Ware w : waren) {
             System.out.println(w);
        }
        return date;
    }
   
   
   
   
   
   
   
   
   
   
   
   
   
   
    public static void main(String[] args) {
        // TODO Auto-generated method stub

    }

}


upload_2019-2-1_21-3-50.png
upload_2019-2-1_21-4-10.png
 

mihe7

Top Contributor
Wenn der Anwender R eingegeben hat, soll eine(!) Rechnung erfasst werden. Dazu werden so lange Artikelnummern (id) eingelesen, bis der Anwender die Erfassung mit einer Leerzeile beendet. Falls es zur eingelesenen Artikelnummer im System einen Artikel gibt, soll dieser zur Rechnung hinzugefügt werden.

Du dagegen gehst nach der Eingabe von R in eine Endlosschleife, in der Du eine (leere) Rechnung nach der anderen erstellst.
 

Funktionierdochmal

Bekanntes Mitglied
die schleife, die bis zu einer leeren eingabe laufen würde würde ja so sein:
do {
...
} while(variable=="");

aber wie erstelle ich abhängig von der Anzahl, wie oft der Benutzer eine ID eingibt, eine neue Variable dafür?
 

mihe7

Top Contributor
Du liest die Eingabe vom Benutzer ein. Ist sie nicht leer, wandelst Du die Eingabe in eine Zahl um. Diese Zahl ist dann die id der Ware. Das zugehörige Warenobjekt holst Du Dir aus dem Warenlager und fügst es der Rechnung hinzu.
 

Funktionierdochmal

Bekanntes Mitglied
Java:
                String eingabe = scan.nextLine();
               
                while(eingabe!="") {
                int result = Integer.valueOf(eingabe);
                rechnungen.add(new Rechnung());
                eingabe = scan.nextLine(); 
                }
Also den ersten Teil habe ich. Aber ich soll ein Objekt aus dem Warenlager "holen"? Wie genau kann ich mir das vorstellen?

Ware:
Java:
public class Warenlager<ware> implements Iterator<ware> {
   
    //Warenlager Iterator: "ListIterator<String> iterator = list.listIterator();" ?

   
    private List<Ware> waren;
   
   
    public Ware addWare(Ware ware) {
       
       
        if (ware == null) {
            throw new IllegalArgumentException("Eingabe ist fehlerhaft!");
           
        } else {
            //Überschreiben bei selber ID ? 
            for(Ware w: waren) {
                if (ware.getID() == w.getID()) {
                   
                }
                   
        }
        }
        return ware;
    }
   
    public Ware getWare(int id) {
        Ware nurAusgabe = null;
        for (Ware w: waren) {
            if (id == w.getID()) {
                nurAusgabe = w;
            } else {
                return null;
            }
        }
        return nurAusgabe;
    }

    public boolean hasNext() {
        // TODO Auto-generated method stub
        return false;
    }

    public ware next() {
        // TODO Auto-generated method stub
        return null;
    }
}
 

mihe7

Top Contributor
Schau Dir mal die Aufgabenstellung an: es geht darum, dass Du geeignete Datenstrukturen aus java.util verwenden sollst. Im UML-Diagramm siehst Du, dass bei einigen Beziehungen {ordered} dabeisteht und bei anderen nicht. Das darfst Du ruhig als Hinweis verstehen.

Das Vorhandensein dieser Eigenschaft bedeutet, dass Du eine Datenstruktur verwenden musst, die das Einhalten einer - wie auch immer gearteten - Ordnung erlaubt. Hier bietet sich meist eine Liste (java.util.List) an.

Beim Warenlager ist es etwas anders. Es spielt keine Rolle, in welcher Reihenfolge die Waren hinzugefügt werden. Das Warenlager ist eine Menge von Waren, ein Warenobjekt kann nur einmal vorhanden sein. Hinzu kommt, dass es eine ID gibt, die jedes Warenobjekt eindeutig identifiziert. Das Warenlager soll anhand der ID das zugehörige Warenobjekt zurückgeben. Insgesamt hat es die typische Eigenschaft eines Dictionaries, nämlich ungeordnete Schlüssel-Werte-Paare abzubilden (Schlüssel ist die ID, der Wert ist die Ware). Folglich verwendest Du im Warenlager für Deine waren nicht java.util.List sondern java.util.Map. Dann werden Deine Methoden alle sehr, sehr einfach ;)

Zum Code in der Kasse:
Code:
while(eingabe!="") {
Die Variable eingabe ist eine Referenz auf ein Objekt vom Typ String und Objekte vergleicht man inhaltlich nicht mit "==" bzw. !=. Strings stellen zwar in gewisser Hinsicht einen Sonderfall dar, das sollte Dich aber nicht interessieren. Außerdem kann eingabe auch null sein. Schreib besser:
Code:
while (istNichtLeer(eingabe)) {
und eine kleine Methode
Java:
static boolean istNichtLeer(String str) {
    return str != null && !str.isEmpty();
}

Dann:
Code:
                rechnungen.add(new Rechnung());
Du musst Dir die erstellte Rechnung schon merken, Du willst ja noch Waren hinzufügen.
Java:
Rechnung rechnung = new Rechnung(); 
...
while (istNichtLeer(eingabe)) { {
    ...
}
// an der Stelle ist die Eingabe von Rechnungspositionen abgeschlossen
rechnungen.add(rechnung);
 

Funktionierdochmal

Bekanntes Mitglied
Java:
            if (auswahl.equals("R")) {
                System.out.println("Bei leerer Eingabe wird abgebrochen.");
                Rechnung rechnung = new Rechnung(); 
                System.out.println("Gebe ID (Ganzzahl) ein: ");
                String eingabe = scan.nextLine();
               
                while(istNichtLeer(eingabe)) {
                    int result = Integer.valueOf(eingabe);
                    if (result%2 == 0) {
                        System.out.println("Jetzt Beschreibung und Preis"
                            + " der Ware bitte:");
                        String name = scan.nextLine();
                        double preis = scan.nextDouble();
                        Ware ware = new Ware(result, name, preis);

                        rechnung.addWare(ware);
                        System.out.println("Neue Ware wurde der Rechnung"
                            + " hinzugefuegt.");
                    } else {
                        System.out.println("Fehlerhafte Eingabe!");
                    }
                   
                eingabe = scan.nextLine(); 
                }
                System.out.println("Rechnung fertiggestellt.");
                rechnungen.add(rechnung);
Habe den Code (dank dir) soweit sinnvoll implementiert. Ich verstehe diese ganze Map/HashMap-Sache nur nicht... versuche mich da mal reinzulesen..
 

mihe7

Top Contributor
Ich verstehe diese ganze Map/HashMap-Sache nur nicht...
Eine Map verwaltet eine Menge von Schlüssel-Werte-Paaren. Dabei sind Schlüssel per Definition eindeutig, d. h. zu einem Schlüssel existiert höchstens ein Schlüssel-Werte-Paar in der Map.

Willst Du beispielsweise einen Kunden über die Kundennummer ermitteln, kannst Du eine Map verwenden. Der Schlüssel ist dann die Kundennummer, der Wert der dazugehörige Kunde.

Du kannst auch alle Einträge einer Map erhalten. Das sind dann eben Schlüssel-Werte-Paare, die als Map.Entry-Objekt zurückgegeben werden. Dabei ist keine Ordnung definiert, d. h. eine Map sichert im Allgemeinen keine bestimmte Reihenfolge zu, in der sie die Einträge zurückgibt. Wird eine solche Zusicherung benötigt, kann man auf SortedMap ausweichen.

Eine HashMap ist nun einfach eine konkrete Implementierung einer Map. Sie verwendet - wie der Name schon sagt - Hashing. Dabei wird direkt aus dem Schlüssel die Position berechnet, an der sich der zugehörige Eintrag befinden müsste. Daher haben HashMaps keine Ordnung und sind in der Regel sehr schnell.

Statt über Hashing könnte man eine Map aber z. B. auch mittels eines Baumes implementieren. Eine solche Implementierung bietet Java ebenfalls an: TreeMap. Eine TreeMap implementiert eine SortedMap - d. h. hier unterliegt die Rückgabe der Schlüssel-Werte-Paare einer Ordnung.

Details findest Du wie immer in den JavaDocs.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Konstruktor nicht definiert wie mach ch es richtig?? Java Basics - Anfänger-Themen 24
W Null-Pointer trotz Konstruktor? Java Basics - Anfänger-Themen 9
M Konstruktor-Aufruf im Konstruktor, aber nicht am Anfang? Java Basics - Anfänger-Themen 4
T Schlüsselworte Schlüsselwort this im Konstruktor Java Basics - Anfänger-Themen 3
frager2345 Warum muss ich hier im Konstruktor meine Exeption nicht abfangen ? Java Basics - Anfänger-Themen 4
J Konstruktor Java Basics - Anfänger-Themen 18
frager2345 Java Singleton Muster -> Methode für Konstruktor mit Parametern Java Basics - Anfänger-Themen 3
G Welche Attribute kommen in den Konstruktor? Java Basics - Anfänger-Themen 5
M wird der Konstruktor nicht als 1. ausgeführt? Java Basics - Anfänger-Themen 13
G Konstruktor und update Java Basics - Anfänger-Themen 4
K Kopier-Konstruktor Java Basics - Anfänger-Themen 6
S Default Konstruktor Java Basics - Anfänger-Themen 7
M Konstruktor ohne Übergabe eines Wertes Java Basics - Anfänger-Themen 7
M Wie kann ich in einem Konstruktor die Methode eines anderen Interfaces mit den jeweiligen Parametern aufrufen? Java Basics - Anfänger-Themen 8
J Vier gewinnt in Java,Spieler Konstruktor Java Basics - Anfänger-Themen 8
kxrdelis Konstruktor für ein Rechtwinkliges Dreieck Java Basics - Anfänger-Themen 10
Zeppi OOP Bruch kürzen im Konstruktor Java Basics - Anfänger-Themen 2
HorstSchröder Konstruktor mit Initialwert Java Basics - Anfänger-Themen 1
C Konstruktor ab serialisiertem Objekt Java Basics - Anfänger-Themen 4
J Input/Output Konstruktor ergänzen, der zur Datei mit einem Objekt passt Java Basics - Anfänger-Themen 0
InfinityDE Problem mit Datenübergabe an Konstruktor Java Basics - Anfänger-Themen 7
B Konstruktor mit Array als Parameter Java Basics - Anfänger-Themen 3
G Variablen Array Länge über den Konstruktor definieren Java Basics - Anfänger-Themen 4
L Konstruktor für eine Map-Datei/Map-Datei einlesen Java Basics - Anfänger-Themen 5
C Interface und Konstruktor Java Basics - Anfänger-Themen 1
H Generische Konstruktor Java Basics - Anfänger-Themen 12
MiMa Seltsames Verhalten im Konstruktor Java Basics - Anfänger-Themen 6
S Konstruktor passt nicht zum Rest Java Basics - Anfänger-Themen 11
C Unbekannter "Konstruktor"?? Java Basics - Anfänger-Themen 10
W OOP Warenlager mit Array(Konstruktor, Methoden) Java Basics - Anfänger-Themen 39
R Objekt in Konstruktor ist nicht zulässig Java Basics - Anfänger-Themen 5
A Mit einer Methode den Konstruktor aufrufen? Java Basics - Anfänger-Themen 2
B Warum können super() und this() nicht gemeinsam in einem Konstruktor verwendet werden? Java Basics - Anfänger-Themen 7
K Konstruktor für ein Objekt mit Zugriffsmethoden Java Basics - Anfänger-Themen 7
H Unterschied Konstruktor und Klassenname x = new Klassenname; Java Basics - Anfänger-Themen 3
B Klassen Array Parameter im Konstruktor? Java Basics - Anfänger-Themen 4
E Konstruktor mit Methode Java Basics - Anfänger-Themen 7
E ArithmeticException im Konstruktor Java Basics - Anfänger-Themen 4
S Konstruktor, Objekte Java Basics - Anfänger-Themen 4
W Typecastin im Konstruktor? Java Basics - Anfänger-Themen 2
A Variablen Variablenwert über Konstruktor ändern Java Basics - Anfänger-Themen 3
F Arrays im Konstruktor Java Basics - Anfänger-Themen 5
C Konstruktor mit und ohne Parameterliste Java Basics - Anfänger-Themen 13
L Instanzvariablen, Veerbung, Konstruktor Java Basics - Anfänger-Themen 32
E Best Practice Konstruktor mit bestehender Intanz der gleichen Klasse aufrufen Java Basics - Anfänger-Themen 4
E Plausibilitätsprüfung in dem Konstruktor mit Ausnahmebehandlung Java Basics - Anfänger-Themen 8
A Aufruf von Konstruktor , obwohl 2 Parameter weggelassen werden Java Basics - Anfänger-Themen 7
A Aufruf von Konstruktor , obwohl 2 Parameter weggelassen werden Java Basics - Anfänger-Themen 0
D Compiler-Fehler Konstruktor von Superklasse übernehmen Java Basics - Anfänger-Themen 1
P Counter im Konstruktor Java Basics - Anfänger-Themen 11
J toString-Methode in Verbindung mit varArgs-Konstruktor Java Basics - Anfänger-Themen 18
I Einträge in den Konstruktor Java Basics - Anfänger-Themen 3
Aprendiendo [JAVA-Syntax] (int... variable) bei einem Konstruktor Java Basics - Anfänger-Themen 8
J Superklassen Konstruktor Verständnisfrage Java Basics - Anfänger-Themen 1
G Int-Array im Konstruktor Parameter Java Basics - Anfänger-Themen 37
T Datentypen Warum mit Konstruktor Objektvariablen initalisieren? Java Basics - Anfänger-Themen 19
A Vererbung bei Klassen mit Objekt der Klasse im Konstruktor Java Basics - Anfänger-Themen 4
P Konstruktor. Java Basics - Anfänger-Themen 4
D Best Practice Objekt automatisch im Konstruktor füllen? Java Basics - Anfänger-Themen 9
D Objekt oder Konstruktor Java Basics - Anfänger-Themen 2
F Java default Konstruktor Java Basics - Anfänger-Themen 1
R Fragen über den Konstruktor Java Basics - Anfänger-Themen 0
T Konstruktor mit Referenzdatentypen Java Basics - Anfänger-Themen 5
H Klassen Konstruktor Parameter als Instanzvariablen zwischen speichern... Java Basics - Anfänger-Themen 11
T setter im Konstruktor einbauen? Java Basics - Anfänger-Themen 8
R ArrayList im Konstruktor. Java Basics - Anfänger-Themen 4
T Konstruktor Probleme Java Basics - Anfänger-Themen 3
J Wie lässt sich der Konstruktor einer Klasse einer Funktion einer Klasse nutzen. Java Basics - Anfänger-Themen 4
S Variable, die im Konstruktor gesetzt wird, wird nicht gefunden vom Compiler. Java Basics - Anfänger-Themen 4
C Generic im Konstruktor Java Basics - Anfänger-Themen 1
F Privater Konstruktor und statische Methoden Java Basics - Anfänger-Themen 4
W Konstruktor von FileInputStream nicht gefunden Java Basics - Anfänger-Themen 18
B Methoden Konstruktor im Konstruktor aufrufen Java Basics - Anfänger-Themen 2
N Aufgabe: Pizza Konstruktor mit mehreren beliebigen Durchmesser/Preiskombinationen Java Basics - Anfänger-Themen 8
K arraygröße durch variablen Konstruktor? Java Basics - Anfänger-Themen 7
K ArrayList in Konstruktor - wie späterer Zugriff Java Basics - Anfänger-Themen 2
G Verwendung von Konstruktor Java Basics - Anfänger-Themen 8
X Übergabeparameter Konstruktor (File) Java Basics - Anfänger-Themen 13
K Wieso muss man finale statische Variablen sofort oder eben im Konstruktor initialisieren? Java Basics - Anfänger-Themen 2
C Konstruktor in Abstrakten Klassen Java Basics - Anfänger-Themen 4
B Konstruktor Problem Java Basics - Anfänger-Themen 8
Joew0815 konstruktor und damit erstellte objekte Java Basics - Anfänger-Themen 1
K Hashtable mit eigenen Konstruktor Java Basics - Anfänger-Themen 2
S Java Fragen Konstruktor & Statische Methoden Java Basics - Anfänger-Themen 4
H Fehler im Konstruktor abfangen Java Basics - Anfänger-Themen 10
J Konstruktor Problem bei Vererbung Java Basics - Anfänger-Themen 1
I Java Eingabe aus einer anderen Klasse in eine andere an Konstruktor übergeben Java Basics - Anfänger-Themen 4
O Konstruktor und Default Konstruktor Java Basics - Anfänger-Themen 7
S Kapselung Objekt bei Übergabe an Konstruktor nicht initalisiert Java Basics - Anfänger-Themen 3
I Vererbung Frage zum Konstruktor Java Basics - Anfänger-Themen 5
Y Konstruktor - Setter/Getter Java Basics - Anfänger-Themen 3
P Konstruktor Java Basics - Anfänger-Themen 4
E Initialisierung von Attributen und Konstruktor Java Basics - Anfänger-Themen 0
H Compiler-Fehler NullPointerException bei .length, Konstruktor fehlerhaft? Java Basics - Anfänger-Themen 3
M Objekt Array an konstruktor übergeben und Initialisieren Java Basics - Anfänger-Themen 1
llabusch Vererbung Super Konstruktor Java Basics - Anfänger-Themen 5
P Erste Schritte WindowBuilder erstellt Konstruktor wie zugreifen Java Basics - Anfänger-Themen 5
M Parameter von Konstruktor, der Superklassen-Konstruktor aufruft Java Basics - Anfänger-Themen 2
V Was soll alles in den Konstruktor? Java Basics - Anfänger-Themen 3
J Objektwerte addieren / Konstruktor Java Basics - Anfänger-Themen 19

Ähnliche Java Themen

Neue Themen


Oben