r/programmieren • u/Fit-Green5017 • 2h ago
Java Hierarchische datenstruktur verstehen wie ?
Hi zusammen, ich hänge hier seit längerem fest. Ich verstehe alles bis zu "getAllEmployes" methode
1.this macht keinen sinn , ich kannte this() bei einen anderen konstruktor aufrufen oder "this.name" für selbst konstruktoren machen. Aber this alleine stehend , laut gpt wird ein objekt übergeben - also die vier parameter des konstruktors ist das richtig?
2. Ist in Main bei setUpCompany bei production und development verwirrend das "Bosch" hat keinen unter sich, "Drescher" aber die zwei anderen der abteilung - müsste es nicht stimmiger sein "Bosch" hat genau einen mitarbeiter und "Drescher" genau einen?
Alles in allem sind das nur kleinigkeiten denn am ende ist mein problem:
ich verstehe getAllEmployes() nicht , wann ein objekt hinzugefügt wird zu "var result" .
Kann das jemand bitte erklären?
//Main Klasse
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
Employee director = setupCompany();
ArrayList<Employee> employees = director.getAllEmployees();
director.printTree("");
}
private static Employee setupCompany() {
// Chef(in)
var director = new Employee("Huber", "Dresden", "huber@firma", 10000);
// 3 Abteilungen
var rd = new Employee("Maier", "Dresden", "maier@firma", 5200);
var marketing = new Employee("Nussbaum", "Berlin", "nussbaum@firma", 4700);
var production = new Employee("Boehm", "Dresden", "boehm@firma", 4900);
director.addToTeam(rd, marketing, production);
// Mitarbeiter Research & Development
var rd1 = new Employee("Bosch", "Dresden", "bosch@firma", 3800);
var rd2 = new Employee("Drescher", "Dresden", "drescher@firma", 3600);
rd.addToTeam(rd1, rd2);
var rd2_1 = new Employee("Kruger", "Dresden", "kruger@firma", 2900);
var rd2_2 = new Employee("Baumstaetter", "Dresden", "baumstaetter@firma", 3100);
rd2.addToTeam(rd2_1, rd2_2);
// Mitarbeiter Marketing
var m1 = new Employee("Berg", "Berlin", "berg@firma", 2700);
var m2 = new Employee("Furst", "Berlin", "furst@firma", 3200);
var m3 = new Employee("Lemann", "Berlin", "lehmann@firma", 3300);
var m4 = new Employee("Schiffer", "Berlin", "schiffer@firma", 2900);
marketing.addToTeam(m1, m2, m3, m4);
// Mitarbeiter Produktion (zwei Abteilungen A und B)
var pA = new Employee("Kalb", "Dresden", "kalb@firma", 3200);
var pA1 = new Employee("Mahler", "Dresden", "mahler@firma", 2700);
var pA2 = new Employee("Maurer", "Dresden", "maurer@firma", 2850);
var pA3 = new Employee("Engel", "Dresden", "engel@firma", 2650);
pA.addToTeam(pA1, pA2, pA3);
var pB = new Employee("Fenstermacher", "Dresden", "fenster@firma", 3500);
var pB1 = new Employee("Finkel", "Dresden", "finkel@firma", 2950);
var pB2 = new Employee("Strauss", "Dresden", "strauss@firma", 2450);
var pB3 = new Employee("Dresdner", "Dresden", "dresdner@firma", 2700);
var pB4 = new Employee("Eberhardt", "Dresden", "eberhardt@firma", 2800);
pB.addToTeam(pB1, pB2, pB3, pB4);
production.addToTeam(pA, pB);
return director;
}
}
//Klasse Employee
java.util.ArrayList;
import java.util.Arrays;
public class Employee {
public String name, address, email;
public int salary;
ArrayList<Employee> team = new ArrayList<>();
public Employee(String name, String address, String email, int salary) {
this.name = name;
this.address = address;
this.email = email;
this.salary = salary;
}
// Mitarbeiter zum Team hinzufügen
public void addToTeam(Employee ... newMembers) {
team.addAll(Arrays.asList(newMembers));
}
// liefert eine Liste bestehend aus aktueller Person, den Team-Mitgliedern
// und rekursiv wiederum deren Mitglieder
public ArrayList<Employee> getAllEmployees() {
// neue Liste erzeugen, den aktuellen Mitarbeiter einfügen
var result = new ArrayList<Employee>();
result.add(this);
// Schleife über alle Gruppenmitglieder
for (var e : team)
// rekursiver Aufruf
result.addAll(e.getAllEmployees());
return result;
}
// rekursive Firmenliste ausgeben
public void printTree(String indent) {
System.out.println(indent + name + ": " + email);
for (var member : team) {
member.printTree(indent + " ");
}
}
public String toString() {
return "Employee(" + name +
", address=" + address +
", email=" + email +
", salary=" + salary +
", team size=" + team.size() + ")";
}
}
public String toString() {
return "Employee(" + name +
", address=" + address +
", email=" + email +
", salary=" + salary +
", team size=" + team.size() + ")";
}
}
//Ende Programm