链接列表在输出时创建无限循环(不允许迭代器)

时间:2014-11-19 11:55:56

标签: java list infinite-loop

当用户将两个或多个值存储到列表中时,输出显示:

item 3: null
item 4: null
item 5: null
...
item 14623: null

当用户想要输出列表

时就是这种情况
case OUTPUT:
{
    System.out.println ("The List:");
    displayList();
    break;
}

这导致了displayList()方法

public static void displayList()
{
    for (int i = 0; i <= list.size (); i++)
    {
        System.out.println ("item " + i + ": " + list.get(i));
    }
}

使用list.size()

public int size()
{
    for(Node n = header; n.getNext() != null; n = n.getNext())
    {
        size++;
    }
    return size;
}

和list.get()

public Object get(int index)
{
    Node n = traverse(index);

    if (n == null)
    {
        return null;
    }
    return n.getData();
}

GETNEXT()

public Node getNext()
{
    return next;
}

横动()。我认为这种方法是造成问题的原因

public Node traverse(int index)
{
    Node n = header;

    if (index < 0)
    {
        return null;
    }

    for (int indexTwo = 0; indexTwo < index; indexTwo++)
    {
        if (n == null)
        {
            return null;
        } // end of if (n == null)
        n = n.getNext ();
    }
    return n;
}

1 个答案:

答案 0 :(得分:1)

此部分永远不会执行:

for (int indexTwo = 0; indexTwo < index; indexTwo++) 

因为index变量为0indexTwo < indexfalse。 使用:

for (int indexTwo = 0; indexTwo <= index; indexTwo++) 

编辑:

另一个问题出在您的size()方法中:

public int size()
{
    for(Node n = header; n.getNext() != null; n = n.getNext())
    {
        size++;
    }
    return size;
}

在哪里增加size变量是静态的?一。所以,它必须在别处初始化。我想你需要把它变成局部变量并在这个方法中初始化它。 另一个问题是,您在每个步骤中都会获得getNext()两次:

for(Node n = header; n.getNext ()!= null; n = n.getNext ())

只需检查n而不是n.getNext() != null null