gor*_*i93 0 java algorithm recursion arraylist
我有一个奇怪的问题,我知道可以解决的方法,但是这次我想用数组列表来解决。问题出在这里:我有一棵员工树。Employee是一个简单的类(在为此雇员工作的雇员列表下):
class Employee
{
String name;
ArrayList<Employee> under = new ArrayList<Employee>();
//fire function
}
Run Code Online (Sandbox Code Playgroud)
我的任务是递归解雇所有没有雇员的雇员。我知道如何使用自定义列表数据结构来解决此问题,但是我想使用数组列表来做到这一点。到目前为止,这是我的代码:
public boolean Fire()
{
if (under.isEmpty())
return true;
else
{
for (int x = 0; x < under.size(); x ++)
{
if (under.get(x).Fire())
under.remove(x);
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
但是此代码的问题是,当我删除under.remove(x)时,under.size()会变小,索引会变得混乱。我尝试在每个under.remove(x)之后设置x = 0,但它做得并不正确。仍有很多员工离职。有数组列表结构的解决方案吗?
这是删除或删除的经典问题。
您必须向后遍历列表。这样,当您删除一个元素时,您不会跳过其他元素,也不会越过列表的末尾。
public boolean Fire()
{
if (under.isEmpty())
return true;
else
{
for (int x = under.size() - 1; x >= 0; x--)
{
if (under.get(x).Fire())
under.remove(x);
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1856 次 |
| 最近记录: |