如何在 Java 中实现 returns 公司内部员工层次结构的功能
How to implement a function in Java that returns the hierarchy of an employee inside a company
我得到一个 Employee-class 和一个包含公司所有员工的列表。现在,我想实现一个函数 findHierarchy(Employee employee)
,其中 return 是相应员工的层次结构。
即想象以下层次结构树:
boss
department_leader_1
group_leader_a
employee_group_a_1
employee_group_a_2
group_leader_b
employee_group_b_1
department_leader_2
findHierarchy(boss)
应该 return 3
,而 findHierarchy(employee_group_a_1)
应该 return 0
而 findHierarchy(group_leader_a)
应该 return 1
.
我已经实现了一个函数 findSubordinates(Employee employee, List<employee> allEmployees)
,其中 return 是一个列表,其中包含给定员工的所有直属下属。例如 findSubordinates(group_leader_a, allEmployees)
会 return [ employee_group_a_1, employee_group_a_2 ]
而 findSubordinates(department_leader_1, allEmployees)
会 return [group_leader_a, group_leader_b]
.
这是我对如何实现的猜测 findHierarchy()
:
public static int findHierarchy(Employee employee, List<Employee> allEmployees, int hierarchy) {
List<Employee> subordinates = findSubordinates(employee, allEmployees);
if (subordinates.size() > 0) {
hierarchy += 1;
for (Employee subordinate: subordinates) {
hierarchy = findHierarchy(subordinate, allEmployees, hierarchy);
}
}
return hierarchy;
}
这似乎并不太远。但是,我很难完全考虑这种递归。有没有人看出错误可能在哪里?
尝试替换
hierarchy += 1;
for (Employee subordinate: subordinates) {
hierarchy = findHierarchy(subordinate, allEmployees, hierarchy);
}
和
int currentHierarchy = hierarchy;
for (Employee subordinate: subordinates) {
hierarchy = Math.max(findHierarchy(subordinate, allEmployees, currentHierarchy + 1), hierarchy);
}
需要 Math.max 以防止用较短的 Employee 链覆盖先前的长链
你的问题出在这一行:
hierarchy = findHierarchy(subordinate, allEmployees, hierarchy);
如您所见,您首先将层次结构递增 1:
hierarchy += 1;
然后立即在 for 循环中重置它,而不是分配它:
hierarchy += findHierarchy(subordinate, allEmployees, hierarchy);
我得到一个 Employee-class 和一个包含公司所有员工的列表。现在,我想实现一个函数 findHierarchy(Employee employee)
,其中 return 是相应员工的层次结构。
即想象以下层次结构树:
boss
department_leader_1
group_leader_a
employee_group_a_1
employee_group_a_2
group_leader_b
employee_group_b_1
department_leader_2
findHierarchy(boss)
应该 return 3
,而 findHierarchy(employee_group_a_1)
应该 return 0
而 findHierarchy(group_leader_a)
应该 return 1
.
我已经实现了一个函数 findSubordinates(Employee employee, List<employee> allEmployees)
,其中 return 是一个列表,其中包含给定员工的所有直属下属。例如 findSubordinates(group_leader_a, allEmployees)
会 return [ employee_group_a_1, employee_group_a_2 ]
而 findSubordinates(department_leader_1, allEmployees)
会 return [group_leader_a, group_leader_b]
.
这是我对如何实现的猜测 findHierarchy()
:
public static int findHierarchy(Employee employee, List<Employee> allEmployees, int hierarchy) {
List<Employee> subordinates = findSubordinates(employee, allEmployees);
if (subordinates.size() > 0) {
hierarchy += 1;
for (Employee subordinate: subordinates) {
hierarchy = findHierarchy(subordinate, allEmployees, hierarchy);
}
}
return hierarchy;
}
这似乎并不太远。但是,我很难完全考虑这种递归。有没有人看出错误可能在哪里?
尝试替换
hierarchy += 1;
for (Employee subordinate: subordinates) {
hierarchy = findHierarchy(subordinate, allEmployees, hierarchy);
}
和
int currentHierarchy = hierarchy;
for (Employee subordinate: subordinates) {
hierarchy = Math.max(findHierarchy(subordinate, allEmployees, currentHierarchy + 1), hierarchy);
}
需要 Math.max 以防止用较短的 Employee 链覆盖先前的长链
你的问题出在这一行:
hierarchy = findHierarchy(subordinate, allEmployees, hierarchy);
如您所见,您首先将层次结构递增 1:
hierarchy += 1;
然后立即在 for 循环中重置它,而不是分配它:
hierarchy += findHierarchy(subordinate, allEmployees, hierarchy);