我正在为我的OOP类进行链接列表分配,并且使用remove方法遇到了一些问题。我们的教授要求我们写一个方法:
public Object removeElement(int index)
这需要一个索引,它是需要删除的元素的位置。它必须返回已删除节点包含的数据。但是,我在获取方法以返回正在删除的对象时遇到问题。由于某种原因,我不断得到该方法必须返回类型对象的结果的错误。我让它返回一个物体,我在各个地方经历了反复试验而没有成功。 这是我的代码:
public Object removeElement(int index)
{
ListIterator iterator = listIterator();
Object object;
//If the supplied index is less than zero, throw an exception.
if(index < 0)
{
IndexOutOfBoundsException ex = new IndexOutOfBoundsException();
throw ex;
}
else
{
for(int i = 0; i <= index; i++)
{
if(!iterator.hasNext())
{
IndexOutOfBoundsException ex = new IndexOutOfBoundsException();
throw ex;
}
else
{
if(i == index)
{
object = iterator.next();
iterator.remove();
return object;
}
else
{
iterator.next();
}
}
}
}
}
答案 0 :(得分:3)
如果 i == index
,您可以返回对象。但编译器不知道循环实际上总是在那一点结束。它正在查看循环的底部并思考“如果我们到达这里,我们想要返回什么?”
我实际上会将您的代码重组为:
if (index < 0)
{
// No need for a separate variable
throw new IndexOutOfBoundsException();
}
// No need for an else block
ListIterator iterator = listIterator();
Object current = null;
for (int i = 0; i <= index; i++)
{
// Note: assuming you expose the size(), you could check this up front...
if(!iterator.hasNext())
{
throw new IndexOutOfBoundsException();
}
current = iterator.next();
}
iterator.remove();
return current;
现在你总是调用remove
并在你调用next()
给定次数时返回,因为那是循环结束而不是异常的结束。
答案 1 :(得分:1)
首先不要使用java LinkedList中的迭代器它是Doubly linked list,我想教授想看看你如何实现LikedList数据结构的删除功能。
其次,在这个地方设置i+1 == index
的循环和条件,保存当前元素以便返回Node returnElement = curent.next;
并进行删除操作curent.next = curent.next.next;
答案 2 :(得分:0)
请发布listIterator()方法实现以及您收到的错误消息。 注意产品:&gt;您必须使用类变量(如整数)来管理列表的大小。所以你没有检查!iterator.hasNext(),而是将index与当前大小进行比较。