Java 如何使用迭代器从LinkedList打印第一个对象?
尝试使用迭代器从myJava 如何使用迭代器从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() {
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()
方法显然有问题,但是你还没有向我们展示它们,所以说不出是什么问题,没错。如果我按照你的建议做,我会继续得到第一个对象,而不会切换到下一个。那么你还没有理解我的建议。基于新的症状,您现在没有正确地推进迭代器。请注意,我的回答没有说明如何推进迭代器。(我假设你会考虑我说的话,而不是把我的答案当作复制粘贴的解决方案。它不是…)