OOP Referenzvariablen - Übung

theqwe

Aktives Mitglied
Hallo zusammen,

ich sitze gerade an einer damaligen Hausaufgabe, die ich etwas umprogrammieren möchte. Da ich leider noch Probleme mit dem Verständnis von komplexen Datentypen, deren Übergabe (Referenzvariablen?) und paar Bereiche des OOP habe, wollte ich daran etwas üben. Jetzt komme ich aber mit meinem Vorhaben nicht weiter.
Die Hausaufgabe war eine Mitarbeiterverwaltung. So wie die Aufgabe gestellt wurde, habe ich sie hinbekommen und auch recht gut verstanden.
Folgende Klassen sollten programmiert werden:
  • MitarbeiterverwaltungTest
  • Mitarbeiter
  • Abteilung
Mitarbeiter und Abteilung haben eine Assoziation zueinander. Die MitarbeiterverwaltungTest Klasse sah wie folgt aus:
Java:
public class Mitarbeiterverwaltung {

    public static void main(String[] args) {
        
        Abteilung abteilung1 = new Abteilung("Buchhaltung");
        Abteilung abteilung2 = new Abteilung("Management");
        
        Mitarbeiter mitarbeiter1 = new Mitarbeiter("Max Mustermann", abteilung1);
        Mitarbeiter mitarbeiter2 = new Mitarbeiter("Kim Miller", abteilung2);
        Mitarbeiter mitarbeiter3 = new Mitarbeiter("Liz Edge", abteilung1);
        
        abteilung1.addMitarbeiter(mitarbeiter1);
        abteilung2.addMitarbeiter(mitarbeiter2);
        abteilung1.addMitarbeiter(mitarbeiter3);

        System.out.println(mitarbeiter1.getName() + " arbeitet in der Abteilung " + mitarbeiter1.getAbteilung().getBezeichnung());
        
        System.out.println("Die Abteilung " + abteilung1.getBezeichnung() + " hat " + abteilung1.getAnzahlMitarbeiter() + " Mitarbeiter.\n");
        
        System.out.println("Die Abteilung " + abteilung1.getBezeichnung() + " hat folgende Mitarbeiter:\n");
        abteilung1.ausgabeMitarbeiter();
    }
}

Die Objekte wurden also in der Main erzeugt. Jetzt möchte ich das ganze dynamisch machen, sodass man selbst bestimmen kann, wie viele Abteilungen und Mitarbeiter erzeugt werden. Ich habe gelesen am besten wäre es dazu Arrays zu nehmen, in denen man die Referenzen speichert. Und hier ist mein Problem.

Java:
public class UnternehmenTest {

    static Scanner tastatur = new Scanner(System.in);
    
    public static void main(String[] args) {
    
        Abteilung[] abteilung = new Abteilung[10];
        Mitarbeiter[] mitarbeiter = new Mitarbeiter[200];
        boolean run = true;
        int auswahl;
        
        while(run) {
            System.out.println("----------------------------------------------");
            System.out.println("");
            System.out.println("1 - Neue Abteilung erstellen");
            System.out.println("2 - Neuen Mitarbeiter erstellen");
            System.out.println("3 - Programm beenden");
            System.out.println("");
            System.out.println("----------------------------------------------");
            
            auswahl = tastatur.nextInt();
            switch(auswahl) {
                case 1:  break; //Soll ich hier eine Methode zum erstellen von einer Abteilung in der Klasse oder in der Abteilung machen?
                case 2:  break; //Hier das gleiche Spiel
                case 3: run = false; break;
                default: System.out.print("Diese Zahl ist ungültig !\n\n"); break;
            }
        }
    }
}

Ab switch weiß ich nicht mehr weiter. Wie soll ich die Methoden schreiben und in welcher Klasse? Wie speicher ich nun die Referenzen in das Array?

Java:
public class Mitarbeiter {
    
    private static int personalZaehler;
    private int personalID;
    private String vorname;
    private String nachname;
    private String geburtsdatum;
    private Abteilung abteilung;
    private Abteilung chef;
    
    public Mitarbeiter(String vorname, String nachname, String geburtsdatum, Abteilung abteilung) {
        
        personalID = 45000 + personalZaehler;
        personalZaehler++;
        this.vorname = vorname;
        this.nachname = nachname;
        this.geburtsdatum = geburtsdatum;
        this.abteilung = abteilung;
    }
    
    public void setName(String vorname, String nachname) {
        
        if(!vorname.equals(null) || !vorname.equals("")) {
            
            this.vorname = vorname;
        }
        
        if(!nachname.equals(null) || !nachname.equals("")) {
            
            this.nachname = nachname;
        }
    }
    
    public void setGeburtsdatum(String geburtsdatum) {
        
        this.geburtsdatum = geburtsdatum;
    }
    
    public void setAbteilung(Abteilung abteilung) {
        
        this.abteilung = abteilung;
    }
    
    public void setChef(Abteilung chef) {
        
        this.chef = chef;
    }
    
    public String getName() {
        
        return vorname + " " + nachname;
    }
    
    public int getPersonalID() {
        
        return personalID;
    }
    
    public String getGebursdatum() {
        
        return geburtsdatum;
    }
    
    public Abteilung getAbteilung() {
        
        return abteilung;
    }
}
Java:
public class Abteilung {
    
    private String abteilungsName;
    private Mitarbeiter[] mitarbeiter;
    private Mitarbeiter chef;
    
    public Abteilung() {
        
    }
    
    public Abteilung(String abteilungsname, int groesse) {
        
        this.abteilungsName = abteilungsname;
        mitarbeiter = new Mitarbeiter[groesse];
    }
    
    public String getAbteilungsName() {
        
        return abteilungsName;
    }
    
    public int getGroesse() {
        
        return mitarbeiter.length;
    }
}

Ich danke euch im Voraus ;)
 

Kirby.exe

Top Contributor
Du musst für den Konstruktor deines Objektes Input erzeugen(einlesen), dann musst die das Objekt instanzieren und dann ins Array speichern.
 

Kirby.exe

Top Contributor
Also zum Beispiel so:
Java:
public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Abteilung[] abteilung = new Abteilung[10];
        Mitarbeiter[] mitarbeiter = new Mitarbeiter[200];
        boolean run = true;
        int auswahl;
        int counter1 = 0;
        int abteilungsGroesse = 0;
        String abteilungName = "";
        
        while(run) {
            System.out.println("----------------------------------------------");
            System.out.println("");
            System.out.println("1 - Neue Abteilung erstellen");
            System.out.println("2 - Neuen Mitarbeiter erstellen");
            System.out.println("3 - Programm beenden");
            System.out.println("");
            System.out.println("----------------------------------------------");
            
            auswahl = getInteger(sc);
            switch(auswahl) {
                case 1: 
                        System.out.println("Geben sie den Namen der neuen Abteilung ein: ");
                        abteilungName = sc.nextLine();
                        System.out.println("Geben sie die Größe der neuen Abteilung ein: ");
                        abteilungsGroesse = getInteger(sc);
                        Abteilung neueAbteilung = new Abteilung(abteilungName, abteilungsGroesse);
                        abteilung[counter1] = neueAbteilung;
                        counter1++;
                        break;
                case 2:  break; //Hier das gleiche Spiel
                case 3: run = false; break;
                default: System.out.print("Diese Zahl ist ungültig !\n\n"); break;
            }
        }
    }
    
    private static int getInteger(Scanner sc) {
        try {
            return Integer.parseInt(sc.nextLine());
        }catch(NumberFormatException ex) {
            ex.printStackTrace();
        }
        return -1;
    }
 

theqwe

Aktives Mitglied
Hi,
super Danke für die Hilfe. Ist es auch möglich die Erstellung einer neuen Abteilung oder Mitarbeiter auch in die jeweilige Klasse zu schreiben? Also das man die Referenz als return zurück gibt und dann in der Test-Klasse ins Array einträgt?
 

theqwe

Aktives Mitglied
Okay, ich habe es jetzt so umgesetzt. Funktioniert super. Sollte mir hoffentlich dabei helfen ein besseres Verständnis von OOP und Assoziationen zu bekommen.
 

Neue Themen


Oben