Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.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 如何使用迭代器从LinkedList打印第一个对象?_Java_Eclipse_Iterator - Fatal编程技术网

Java 如何使用迭代器从LinkedList打印第一个对象?

Java 如何使用迭代器从LinkedList打印第一个对象?,java,eclipse,iterator,Java,Eclipse,Iterator,尝试使用迭代器从myLinkedList打印对象,但第一个对象没有打印出来,因此它从第二个对象开始: Car car1 = new Car("Koenigsegg CCXR Trevita", "BASASS1"); Car car2 = new Car("Lamborghini Veneno", "B1T3M3"); Car car3 = new Car("W Motors Lykan Hypersport", "NUMERO1"); public void addToList() {

尝试使用迭代器从my
LinkedList
打印对象,但第一个对象没有打印出来,因此它从第二个对象开始:

Car car1 = new Car("Koenigsegg CCXR Trevita", "BASASS1");
Car car2 = new Car("Lamborghini Veneno", "B1T3M3");
Car car3 = new Car("W Motors Lykan Hypersport", "NUMERO1");

public void addToList() {

    availableCarList.add(car1);
    availableCarList.add(car2);
    availableCarList.add(car3);

    System.out.print("Original contents of list: ");

    IIterator itr = availableCarList.getIterator();

    while(itr.hasNext()) {
        Object element = itr.next();
        System.out.print(element + " ");
    }

    System.out.println();
}
结果:

我做错了什么

在LinkedList类中实现的hasNext()和next():

private class Iterator<T> implements IIterator<T>
{

    private LinearNode<T> temp;
    public Iterator()
    {
        temp = (LinearNode<T>) front;
    }

    @Override
    public boolean hasNext() 
    {
        return (temp.getNext() != null);
    }

    @Override
    public T next() 
    {
        if (temp == null)
        {
            throw new IllegalStateException();
        }

        temp = temp.getNext();
        return temp.getElement();
    }   
}
私有类迭代器实现II迭代器
{
专用线性节点温度;
公共迭代器()
{
温度=(线性节点)前部;
}
@凌驾
公共布尔hasNext()
{
返回(temp.getNext()!=null);
}
@凌驾
公共交通工具
{
if(temp==null)
{
抛出新的非法状态异常();
}
temp=temp.getNext();
返回temp.getElement();
}   
}

首先,您向我们展示的代码表明,
LinkedList
实际上是您自己的类。。。不是标准的
链接列表

用与标准库类相同的(短)名称命名类是一个非常糟糕的主意。它使读者困惑。。。如果你在3个多月的时间里看了你的代码,那就包括你自己了

实际问题很可能是列表迭代器的实现不正确。在我看来,您正在跳过列表中的第一个元素

鉴于
temp
包含的内容,我认为:

  • hasNext()
    方法应该是测试
    temp
    ,而不是
    temp.getNext()
  • next()
    方法应该返回
    temp.getElement()
    ,而不是
    temp.getNext().getElement()

  • 您需要提供
    IIterator
    的定义,并假设您的
    LinkedList
    类,因为
    java.util.LinkedList
    不返回
    IIterator
    。或者如果您一直在使用
    java.util.LinkedList
    (和
    Iterator()
    方法和返回的
    java.util.Iterator
    )。列表和/或迭代器的实现有问题。IIterator是一个接口,我在LinkedList类中实现了它的方法(hasNext()和next())。那么,你的
    hasNext()
    next()
    方法显然有问题,但是你还没有向我们展示它们,所以说不出是什么问题,没错。如果我按照你的建议做,我会继续得到第一个对象,而不会切换到下一个。那么你还没有理解我的建议。基于新的症状,您现在没有正确地推进迭代器。请注意,我的回答没有说明如何推进迭代器。(我假设你会考虑我说的话,而不是把我的答案当作复制粘贴的解决方案。它不是…)