OOP Objektnamen über die Konsole richtig einlesen

Diskutiere Objektnamen über die Konsole richtig einlesen im Java Basics - Anfänger-Themen Forum; Guten Abend, ich habe die Aufgabe gestellt bekommen, objektorientiert Daten mit Hilfe einer Konsolen-Anwendung und der HsqlDB zu verwalten. Es...

  1. Ich1994
    Ich1994 Neues 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 (Text):
    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 (Text):
    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 (Text):
        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();
            }
        }
     
  2. Vielleicht hilft dir dieses Buch hier weiter.
  3. Robat
    Robat Bekanntes Mitglied
    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.
     
  4. Ich1994
    Ich1994 Neues 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...
     
  5. Robat
    Robat Bekanntes Mitglied
    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.
     
  6. Ich1994
    Ich1994 Neues 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:

    Code (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.");
     
  7. Robat
    Robat Bekanntes Mitglied
    Überleg mal, wo hier die NullPointerException fliegen kann
     
  8. Ich1994
    Ich1994 Neues 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...
     
  9. Robat
    Robat Bekanntes Mitglied
    Den Namen des Unternehmens liest du doch erst ein. Warum deklarierst du die Variable überhaupt außerhalb des try-catch-Blocks?
     
  10. Ich1994
    Ich1994 Neues 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?!
     
  11. Robat
    Robat Bekanntes Mitglied
    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.
     
  12. Wenn du Java lernen möchtest, empfehlen wir dir dieses Buch hier
Passende Stellenanzeigen aus deiner Region:





Die Seite wird geladen...

Objektnamen über die Konsole richtig einlesen - Ähnliche Themen

String in Objektnamen umwandeln
String in Objektnamen umwandeln im Forum Allgemeine Java-Themen
Objektnamen ausgeben
Objektnamen ausgeben im Forum Java Basics - Anfänger-Themen
Variable Objektnamen
Variable Objektnamen im Forum Java Basics - Anfänger-Themen
Objektnamen für Methodenaufrauf einlesen lassen
Objektnamen für Methodenaufrauf einlesen lassen im Forum Java Basics - Anfänger-Themen
Dynamische Objektnamen
Dynamische Objektnamen im Forum Java Basics - Anfänger-Themen
Thema: Objektnamen über die Konsole richtig einlesen