Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用递归索引解决Java ArrayList remove问题?_Java_Algorithm_Recursion_Arraylist - Fatal编程技术网

使用递归索引解决Java ArrayList remove问题?

使用递归索引解决Java ArrayList remove问题?,java,algorithm,recursion,arraylist,Java,Algorithm,Recursion,Arraylist,我有一个奇怪的问题,我知道如何解决,但这次我想用数组列表来解决。问题是: 我有一棵员工树。Employee是一个简单的类(下面是为该员工工作的员工列表): class员工 { 字符串名; ArrayList under=new ArrayList(); //消防功能 } 我的任务是反复解雇所有没有员工的员工。我知道如何处理定制列表数据结构,但我想使用数组列表。以下是我目前的代码: public boolean Fire() { if (under.isEmpty())

我有一个奇怪的问题,我知道如何解决,但这次我想用数组列表来解决。问题是: 我有一棵员工树。Employee是一个简单的类(下面是为该员工工作的员工列表):

class员工
{
字符串名;
ArrayList under=new ArrayList();
//消防功能
}
我的任务是反复解雇所有没有员工的员工。我知道如何处理定制列表数据结构,但我想使用数组列表。以下是我目前的代码:

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;
}
public boolean Fire()
{
if(在.isEmpty()下)
返回true;
其他的
{
对于(int x=0;x

但这段代码的问题是,当我在.remove(x)下删除时,.size()下的会变小,索引也会变得混乱。我试图在.remove(x)下的每个之后设置x=0,但没有完全正确。还有一个员工。是否有数组列表结构的解决方案?

尝试使用迭代器。您只需在迭代器上使用
.next()
不断遍历它,每当您发现某人的手下没有员工时,就调用
.remove()
(在迭代器上),这将删除迭代器给您的最后一个元素。

这是删除或删除的典型问题

您必须在列表中向后迭代。这样,当您删除一个元素时,您就不会跳过其他元素或跳过列表的末尾

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;
}

这就是迭代器具有remove()方法的原因。查找集合的迭代器()调用,并在for循环中使用它。

我倾向于记住那些从后面咬我的问题。:-)
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;
}