0

我正在为我的 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();

               }
           }
       }
   }

}

4

3 回答 3

3

你让它返回一个对象if 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;

现在,当您调用给定次数时,您总是调用并返回,因为那是循环将结束而不是通过异常结束的时候。removenext()

于 2013-04-11T20:46:33.177 回答
1

首先不要使用 java LinkedList 中的迭代器,它是双向链表,我想教授想看看你如何为LikedList数据结构实现删除功能。

其次在这个地方创建循环和条件i+1 == index,保存当前元素以返回,Node returnElement = curent.next;并进行删除操作curent.next = curent.next.next;

于 2013-04-11T20:52:33.053 回答
0

请发布 listIterator() 方法实现和您收到的错误消息。注意:> 您必须使用类变量(例如整数)来管理列表的大小。所以你没有检查!iterator.hasNext(),而是将索引与当前大小进行比较。

于 2013-04-11T20:52:31.280 回答