Java 链表-删除索引中的元素

Java 链表-删除索引中的元素,java,linked-list,Java,Linked List,我正在为我的OOP类处理一个链表赋值,并且在使用remove方法时遇到了一些问题。我们的教授要求我们写一个方法: public Object removeElement(int index) 这将获取一个索引,该索引是需要删除的元素的位置。它还必须返回已删除节点包含的数据。但是,我很难让方法返回它正在删除的对象。由于某种原因,我一直得到这样一个错误,即该方法必须返回object类型的结果。我让它返回一个对象,我在不同的地方经历了反复试验,但没有成功。 这是我的密码: public Objec

我正在为我的OOP类处理一个链表赋值,并且在使用remove方法时遇到了一些问题。我们的教授要求我们写一个方法:

public Object removeElement(int index)
这将获取一个索引,该索引是需要删除的元素的位置。它还必须返回已删除节点包含的数据。但是,我很难让方法返回它正在删除的对象。由于某种原因,我一直得到这样一个错误,即该方法必须返回object类型的结果。我让它返回一个对象,我在不同的地方经历了反复试验,但没有成功。 这是我的密码:

 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();

               }
           }
       }
   }
公共对象移除元素(int索引)
{
ListIterator迭代器=ListIterator();
对象对象;
//如果提供的索引小于零,则引发异常。
如果(指数<0)
{
IndexOutOfBoundsException ex=新的IndexOutOfBoundsException();
掷骰子;
}
其他的
{

对于(int i=0;i如果
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;
if(索引<0)
{
//不需要单独的变量
抛出新的IndexOutOfBoundsException();
}
//不需要其他块
ListIterator迭代器=ListIterator();
对象当前=空;

对于(int i=0;i如果
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;
if(索引<0)
{
//不需要单独的变量
抛出新的IndexOutOfBoundsException();
}
//不需要其他块
ListIterator迭代器=ListIterator();
对象当前=空;
对于(int i=0;i请发布listIterator()方法实现和您收到的错误消息。
注意:>您必须使用一个类变量(如整数)来管理列表的大小。因此,您不必使用check!iterator.hasNext(),而是将索引与当前大小进行比较。

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

首先不要使用java LinkedList中的迭代器,我想教授想看看如何实现数据结构的删除功能


其次,在这里做一个循环和条件,其中
i+1==index
,保存当前元素以返回,比如
Node returnElement=curent.next;
并进行删除操作
curent.next=curent.next;

首先不要使用java LinkedList中的迭代器,我想教授想看看你们是如何实现的删除数据结构的功能



其次,在此处进行循环并设置条件,其中
i+1==index
,保存当前元素以返回,如
Node returnElement=curent.next;
并进行删除操作
curent.next=curent.next.next;

错误是否给出了行号?完整的错误消息是什么?错误不是在编译时出现的,而是在我编译之前的方法中。@DanielPikul:这实际上是一个编译错误。这只是您的IDE基本上按照您键入的方式编译。我在这里30分钟学到的东西比我在13周的课堂上学到的要多。:)我从来都不知道该怎么称呼它。错误是否给出了行号?完整的错误信息是什么?错误不在编译时,而是在我编译之前的方法中。@DanielPikul:这实际上是一个编译错误。它只是你的IDE基本上按照你键入的方式编译。我在这里30分钟学到的东西比我在13周的cla中学到的要多学生:)我从来都不知道该怎么称呼它。那我怎么才能修复它呢?我有一个方法,如果它没有到达它,就会抛出一个异常,我希望它能处理好。好的,我很快就比较了它们。太好了!谢谢!!!我实际上保留了我的代码,只是最初将对象设置为null,并在循环之外写了一个返回行。你的代码当然更简单,也帮助我思考了一下。那我怎么解决呢?我有一个方法,如果达不到它,就会抛出一个异常,我希望它能解决。好的,我正在快速比较它们。太好了!谢谢!!!我实际上保留了我的代码,只是最初将对象设置为null,并在外部写了一个返回行循环。你的代码肯定要简单得多,并帮助我思考了一下。LinkedList没有存储的大小索引,即ArrayList。我必须使用hasNext();LinkedList没有大小?那是什么?这是我们在这门课上不允许使用的东西。我们使用的是我们的教授编写的自定义LinkedList子集。我应该澄清一下。@DanielPikul-不用担心…只是想知道我是不是疯了一会儿;-)是的,但您已使用Index删除元素。它不应该是。remove(element)方法应该只在那里。请参阅java.util.LinkedListLinkedList没有存储的大小索引,即ArrayList。我必须使用hasNext();LinkedList没有大小?那是什么?这是我们在这门课上不允许使用的东西。我们使用的是我们的教授编写的自定义LinkedList子集。我应该澄清一下。@DanielPikul-不用担心…只是想知道我是不是疯了;-)是的,但你使用了索引来删除元素。它不应该是。remove(Element)方法应该只在那里。请参考java.util.LinkedList