OOP Objektnamen über die Konsole richtig einlesen

Ich1994

Mitglied
Guten Abend,

ich habe die Aufgabe gestellt bekommen, objektorientiert Daten mit Hilfe einer Konsolen-Anwendung und der HsqlDB zu verwalten. Es geht hier um zwei Klassen - Mitarbeiter und Unternehmen. Zunächst lege ich ein neues Unternehmen an, lese mit einem BufferedReader den Namen und die Adresse ein. Anschließend wird das Objekt in eine ArrayList geschrieben und zum Schluss in die Datenbank. Das funktioniert auch alles.

Nun müssen für die Unternehmen ja Mitarbeiter angelegt werden können. Hier gehe ich ähnlich vor: Ich lese den Vor- und Nachnamen ein (beide als String) und übergebe diese an den Konstruktor in einer ArrayList. Als dritter Parameter soll ein Objekt der Klasse Unternehmen verwendet werden. Das Datenbankfeld soll ein varchar(255) sein.

Hier komme ich gerade nicht weiter. Es soll ja erst einmal sichergestellt sein, dass das Unternehmen überhaupt existiert. Wenn ja, wird der Mitarbeiter angelegt und in die DB geschrieben, wenn nicht eine Fehlermeldung ausgeben, dass zunächst das Unternehmen angelegt werden muss.

Ich freue mich über jeden Ratschlag.
BEsten Dank!

Die Programmcodes:

Klasse Mitarbeiter
Code:
public class Mitarbeiter
{
    private String vorname, nachname, oganisation;
    private Organisation usedUnternehmen;
 
    //Konstruktor
    public Mitarbeiter (String vorname, String nachname, Unternehmen usedUnternehmen)
    {
        if (vorname == null)
        {
            throw new IllegalArgumentException ("Vorname darf nicht null sein !");
        }
        if (vorname.isEmpty () /* == true */)
        {
            throw new IllegalArgumentException ("Vorname ist leer!");
        }
     
        if (nachname == null)
        {
            throw new IllegalArgumentException ("Nachname darf nicht null sein !");
        }
        if (nachname.isEmpty () /* == true */)
        {
            throw new IllegalArgumentException ("Nachname ist leer !");
        }
    
        this.vorname = vorname;
        this.nachname = nachname;
        this.usedUnternehmen.addMitarbeiterToList(this);
    }
    public String getVorname()
    {
       return this.vorname;
    }
 
    public String getNachname()
    {
       return this.nachname;
    }
 
    public String getUnternehmen()
    {
       return this.unternehmen;
    }
 
    public String toString()
    {
       return getVorname() + ", " + getNachname() + ", " + getOrganisation();
    }
}

Klasse Unternehmen
Code:
public class Unternehmen
{
    private String Name;
    private String Strasse;
    private String Hausnummer;
    private ArrayList <Mitarbeiter> MitarbeiterListe;
 
 
    public Unternehmen(String Name, String Strasse, String Hausnummer)
    {
        if (Name == null)
        {
            throw new IllegalArgumentException ("Name is null !");
        }
        if (Name.isEmpty () /* == true */)
        {
            throw new IllegalArgumentException ("Name is empty !");
        }
     
        if (Strasse == null)
        {
            throw new IllegalArgumentException ("Strasse is null !");
        }
        if (Strasse.isEmpty () /* == true */)
        {
            throw new IllegalArgumentException ("Strasse is empty !");
        }
     
        if (Hausnummer == null)
        {
            throw new IllegalArgumentException ("Hausnummer is null !");
        }
        if (Hausnummer.isEmpty () /* == true */)
        {
            throw new IllegalArgumentException ("Hausnummer is empty !");
        }
     
        this.Name = Name;
        this.Strasse = Strasse;
        this.Hausnummer = Hausnummer;
    
        this.MitarbeiterListe = new ArrayList <Mitarbeiter> ();
    }
 
    public void addMitarbeiterToList(Mitarbeiter newMitarbeiter)
    {
        if(newMitarbeiter== null)
        {
            throw new IllegalArgumentException("newMitarbeiter is null!");
        }
    
        this.MitarbeiterListe.add (newMitarbeiter);
    }
 
    public String getName ()
    {
        return this.Name;
    }
    public String getStrasse ()
    {
        return this.Strasse;
    }
    public String getHausnummer ()
    {
        return this.Hausnummer;
    }
 
    public String toString()
    {
        return getName() + ", " + getStrasse() + ", " + getHausnummer();
    }

Methode in Klasse Main, die im Menü aufgerufen wird, wenn ein neuer Mitarbeiter angelegt werden soll. Ist nicht vollständig, der Part für das Unternehmen fehlt, deshalb auch der null-Parameter.
Code:
    public void addMitarbeiter()
    {
        System.out.println("Hinzufügen eines Mitarbeiters ausgewählt!");
        scanner = new Scanner(System.in);
    
        br = new BufferedReader(new InputStreamReader(System.in));
        String vorname = "";
        String nachname = "";
        try {
        
            //Zeichenweises Einlesen des Strings, damit auch Leerzeichen erlaubt sind
            System.out.println("Vorname des Mitarbeiters: ");
            vorname = br.readLine();
            if(vorname.length()>64)
            {
                throw new IllegalArgumentException("Vorname zu lang!");
            }
        
            System.out.println("Nachname des Mitarbeiters: ");
            nachname = br.readLine();
            if(nachname.length()>64)
            {
                throw new IllegalArgumentException("Nachname zu lang!");
            }
            ansprechpartner_liste.add(new Ansprechpartner(vorname, nachname, null)); //Anlegen des Objektes
            System.out.println("Objekt Ansprechpartner: " + " " + vorname + " " + nachname + " erfolgreich angelegt.");

//ab hier SQL
        
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
 

Robat

Top Contributor
Wenn du die Unternehmen zur Laufzeit in der Liste hast dann geh doch einfach die Liste der Unternehmen durch und schau ob du eins mit dem gesuchten Namen findest.
 

Ich1994

Mitglied
Daran hatte ich auch schon gedacht - einfach mit der contains()-Methode prüfen.

Das Problem ist nur, wie muss ich die Eingabe des Parameters Unternehmen programmieren?! Ich kann ja keinen String übergeben, wenn der Parameter ein Objekt vom Typ Unternehmen ist...
 

Robat

Top Contributor
Naja dann darfst du nicht die contains() Methode benutzen, sondern musst es selber programmieren.
Iteriere über die Liste und schau ob es ein Unternehmen mit dem Namen gibt. Mit Java 8 Streams wäre das ein Einzeiler.
 

Ich1994

Mitglied
Ok, danke, werde mir das mal anschauen.

Wie kann ich das Einlesen des Unternehmens realisieren? Hätte an sowas in der Art gedacht, aber hier bekomme ich eine NullPointerException:

Java:
Unternehmen unternehmen = null;
        String unternehmenAlsString= unternehmen.toString();
        try {
           
            //Zeichenweises Einlesen des Strings, damit auch Leerzeichen erlaubt sind
            System.out.println("Vorname des Mitarbeiters: ");
            vorname = br.readLine();
            if(vorname.length()>64)
            {
                throw new IllegalArgumentException("Vorname zu lang!");
            }
           
            System.out.println("Nachname des Mitarbeiters: ");
            nachname = br.readLine();
            if(nachname.length()>64)
            {
                throw new IllegalArgumentException("Nachname zu lang!");
            }
           
            System.out.println("Unternehmen des Mitarbeiters: ");
            unternehmenAlsString= br.readLine();
            if(unternehmenAlsString.length()>64)
            {
                throw new IllegalArgumentException("Name des Unternehmens zu lang!");
            }
           
            ansprechpartner_liste.add(new Mitarbeiter(vorname, nachname, organisation)); //Anlegen des Objektes
            System.out.println("Objekt Mitarbeiter: " + " " + vorname + " " + nachname + " erfolgreich angelegt.");
 

Ich1994

Mitglied
Jap, ich hab die Variable falsch initalisiert. *facepalm*

Hast du evtl. einen Tipp für mich, wie ich diesen Schritt richtig mache? Der Rest sollte ja eigentlich stimmen...
 

Robat

Top Contributor
Den Namen des Unternehmens liest du doch erst ein. Warum deklarierst du die Variable überhaupt außerhalb des try-catch-Blocks?
 

Ich1994

Mitglied
Stimmt, fiel mir dann auch gerade auf..

Oder kann ich nicht einfach ein Temporäres Objekt erstellen, die Werte einzeln per BufferedReader eingeben, dann dem Mitarbeiter-Konstruktor übergeben und dann mit Hilfe des Konstruktors prüfen lassen, ob das Unternehmen vorhanden ist?!
 

Robat

Top Contributor
Und dann? Lass den Nutzer doch einfach solange einen Namen für das Unternehmen eingeben, bis er einen eingibt, der in der Liste noch nicht vorhanden ist.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Objektnamen ausgeben Java Basics - Anfänger-Themen 10
G Variable Objektnamen Java Basics - Anfänger-Themen 43
O Klassen Objektnamen für Methodenaufrauf einlesen lassen Java Basics - Anfänger-Themen 2
J OOP Dynamische Objektnamen Java Basics - Anfänger-Themen 6
T Objektnamen aus String holen Java Basics - Anfänger-Themen 8
K Objektnamen Java Basics - Anfänger-Themen 14
M Objektnamen Variabel vergeben Java Basics - Anfänger-Themen 7
F Objektnamen mit Schleife durchlaufen. Java Basics - Anfänger-Themen 10
V generierte Objektnamen in Schleife? Java Basics - Anfänger-Themen 18
D Dynamische Objektnamen / Variablen als Objektnamen verwenden Java Basics - Anfänger-Themen 3
X Anhand eines Objektnamen ein Objekt finden Java Basics - Anfänger-Themen 11
richis-fragen GlassPane über JScrollPane legen Java Basics - Anfänger-Themen 6
A Server - Client Nachrichtenaustausch über Eventbus Java Basics - Anfänger-Themen 12
P Neue Java v8 JRE Version nicht über alte drüber installierbar: Wie sonst? Java Basics - Anfänger-Themen 7
D Downloadfortschritt von Datei über Google Drive API v3 Java Basics - Anfänger-Themen 10
B großzügiges Pixelraster über Bildschirm legen Java Basics - Anfänger-Themen 7
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
L Beim Java Programmstart, mehrere Parameter über die Kommandozeile übergeben Java Basics - Anfänger-Themen 9
sserio Iterierung über ein zweidimensionales Array Java Basics - Anfänger-Themen 16
H Eine Methode über Actionlistener beenden Java Basics - Anfänger-Themen 8
S Java über SSH Java Basics - Anfänger-Themen 13
X Wie erreiche ich, dass ein Robot weitere Attribute hat, die nicht materialisiert sind, sondern nur über get/ set-Methoden simuliert sind? Java Basics - Anfänger-Themen 1
M Wie können Klassen nicht-materialisierte Attribute haben, die nur über get/ set-Mehoden simuliert sind? Java Basics - Anfänger-Themen 6
D Best Practice Ausgabe über direkte Ausgabe oder try-catch? Java Basics - Anfänger-Themen 13
R Eigenschaft über Parameter auslesen und ändern Java Basics - Anfänger-Themen 15
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
W Unterschiede bei Zugriff auf Objekt und Klassenvariablen über einen Getter? Java Basics - Anfänger-Themen 2
W char über die Konsole? Java Basics - Anfänger-Themen 7
EchtKeineAhnungManchmal Hallo :) ich bekomme es nicht hin eine Fehlermeldung auszugeben über die GUI Java Basics - Anfänger-Themen 3
S Array über ein Ausgabemethode in main ausgeben Java Basics - Anfänger-Themen 31
C Potenzberechnung über switch case. Taschenrechner mit Eingabe über einen grafischen Dialog Java Basics - Anfänger-Themen 22
J Wert zurückgeben über get Methode Java Basics - Anfänger-Themen 8
J Eintrag Combobox über einen String auswählen Java Basics - Anfänger-Themen 3
A Array Ansprache einer Zelle über Punktnotation? Java Basics - Anfänger-Themen 3
O Java über cmd benutzen ? Java Basics - Anfänger-Themen 5
J Variablenzugriff über string Java Basics - Anfänger-Themen 18
W Objekte über Scanner Input; ToString Probleme... Java Basics - Anfänger-Themen 4
H Methode über String Wert aufrufen Java Basics - Anfänger-Themen 8
M Java Kompilieren über Package grenzen hinaus Java Basics - Anfänger-Themen 4
M Arrays mit mehreren Werten über JOptionPane initialisieren Java Basics - Anfänger-Themen 12
Tino1993 Ellipse über draw Funktion ohne spur wandern lassen Java Basics - Anfänger-Themen 6
M Mehrere Datenbank zugriffe über tomee.xml regeln? Java Basics - Anfänger-Themen 1
N Input/Output Eine Frage über system.out.println. Java Basics - Anfänger-Themen 10
J Array über Getter erlangen Java Basics - Anfänger-Themen 34
S While-Schleife geht in Endlosschleife über, warum? Java Basics - Anfänger-Themen 6
B OOP-Anfänge über CMD + Editor Java Basics - Anfänger-Themen 30
G Variablen Array Länge über den Konstruktor definieren Java Basics - Anfänger-Themen 4
L Addition von Arrays über die Parameterliste Java Basics - Anfänger-Themen 11
C Datei über relative Pfade einlesen Java Basics - Anfänger-Themen 6
1 Erste Schritte Was denkt ihr über eines meiner ersten Javaprogramme? Java Basics - Anfänger-Themen 2
S Allgemeine Frage über Generics und Vererbungen Java Basics - Anfänger-Themen 5
J Button über Pfeiltasten bewegen Java Basics - Anfänger-Themen 8
E Objekt durch Benutzer über Konsole erzeugen - Java Java Basics - Anfänger-Themen 3
N Eingabe Kommazahlen über Scanner Java Basics - Anfänger-Themen 2
T DoWhile Schleife über mehrere Mothoden Java Basics - Anfänger-Themen 5
C Collections List über Interface zugreifen Java Basics - Anfänger-Themen 32
J Gefilterten Stream über die Konsole ausgeben Java Basics - Anfänger-Themen 1
S Variablen Klassenvariable über Objekt aufrufen Java Basics - Anfänger-Themen 16
S Bilder über Socket Senden Java Basics - Anfänger-Themen 1
K Textdatei auslesen und über Mqtt schicken Java Basics - Anfänger-Themen 4
L Iterieren über eine CSV Datei Java Basics - Anfänger-Themen 7
I GUI über Eclipse oder NetBeans Java Basics - Anfänger-Themen 23
S Klassenaufruf über JFrame Button Java Basics - Anfänger-Themen 3
Java The Hutt SetWerte über verschiedene Klassen Java Basics - Anfänger-Themen 16
L Zugriff auf Attribute eins Objekts über ActionListener Java Basics - Anfänger-Themen 4
O Methode über Leerzeichen Java Basics - Anfänger-Themen 13
A Variablen Variablenwert über Konstruktor ändern Java Basics - Anfänger-Themen 3
J MySQL Datumsabfrage über ResultSet in Java-Servlet Java Basics - Anfänger-Themen 4
CptK Interface Bilder über Bildschirm bewegen, bis der Abstand zum vorherigen zu groß wird Java Basics - Anfänger-Themen 13
dapzoo Class File Version zu niedrig? Ausführen über Eingabeaufforderung nicht möglich Java Basics - Anfänger-Themen 14
J Punkt auf,über,unter oder zwischen 2 Geraden Java Basics - Anfänger-Themen 14
CptK Interface Bild über Methode ändern funktioniert nicht Java Basics - Anfänger-Themen 4
R Keine Verbindung zu MySql über Netbeans Java Basics - Anfänger-Themen 15
E Best Practice Jar-file mit zwei Klassen und externer Bibliothek über Konsole erzeugen Java Basics - Anfänger-Themen 13
J Aufruf einer Methode über einen String Java Basics - Anfänger-Themen 11
G Arraynamen über eine Schleife ansprechen Java Basics - Anfänger-Themen 4
S Bild über JButton legen Java Basics - Anfänger-Themen 3
temi Druckeransteuerung über ESC-Sequenz Java Basics - Anfänger-Themen 21
M Methodenaufruf über SQL UPDATE Java Basics - Anfänger-Themen 8
B Könnte jemand über dieses jurze Javaprogramm schauen? Irgendwas funktioniert mit der z-Varible nicht Java Basics - Anfänger-Themen 2
M Java Programm über Batch-Datei ausführen Java Basics - Anfänger-Themen 1
E Wie Passwort-Eingabe (ohne Echo!) über Konsole ? Java Basics - Anfänger-Themen 4
C Erste Schritte Fehler beim *.class Aufruf über cmd.exe Java Basics - Anfänger-Themen 9
R Fragen über den Konstruktor Java Basics - Anfänger-Themen 0
X Minimax-Algorithmus über alle Kanten möglich? - Kanten darstellen Java Basics - Anfänger-Themen 1
P Threads Prozess kann nicht über die GUI gestartet werden Java Basics - Anfänger-Themen 8
T CMD über Java-Programm aufrufen Java Basics - Anfänger-Themen 2
X Finde die Files über FTP nicht Java Basics - Anfänger-Themen 4
J Methode über Scanner aufrufen Java Basics - Anfänger-Themen 15
P Programm kann über CMD nicht ausgeführt werden Java Basics - Anfänger-Themen 2
E Frage über Speichern und Ausgabe Java Basics - Anfänger-Themen 7
J Verschieden Fragen über Java Programmierung Java Basics - Anfänger-Themen 3
X Betriebssytem interne Consolen Commands über Java starten Java Basics - Anfänger-Themen 2
J ArrayList über verschiedene Klassen verwenden Java Basics - Anfänger-Themen 7
A .jar über Webbrowser aufrufen Java Basics - Anfänger-Themen 2
D Ausgabe über JLabel Java Basics - Anfänger-Themen 12
L Erste Schritte Arrays über eine for Schleife ansprechen. Java Basics - Anfänger-Themen 6
MiMa Datentyp Short Wert zuweisen über Methode Java Basics - Anfänger-Themen 2
K Objekt soll Anwendung über Änderungen informieren Java Basics - Anfänger-Themen 8
Detox Class Datei erzeugen nicht möglich über cmd Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben