在Java中实现一个新的LinkedList方法

时间:2012-08-21 14:13:16

标签: java eclipse class linked-list

我的作业涉及创建三个操纵链表的方法。说明书要求我使用以下构造函数:

 public MyList (LinkedList<Integer> list) {
 ...
 }

但是,Eclipse似乎不喜欢我的代码,无论我如何尝试集成它。这是我目前的尝试:

import java.util.*;

public class ListClass {

public static void main(String[] args) {
    LinkedList<Integer> list = new LinkedList<Integer>();
    list.add(10);
    list = MyList(list);
}

public MyList (LinkedList<Integer> list){
    LinkedList<Integer> r = list;
    return r;
}
}

现在我认为上面的MyList构造函数很乐意只返回输入的列表,但我的Java技能非常弱。我一直在阅读这些教程,并给了它一个去,但它没有像我想的那样工作。

无论如何所以Eclipse给了我两个错误 - 在“list = MyLIst(list);”它表示方法MyList未定义为ListClass,并在“公共MyList”行显示“方法的返回类型丢失” - 但我告诉它r是一个链表,并返回它。

这伤害了我的大脑,我无法弄明白,有人能帮我一把吗?我想如果我能够使上面的代码工作,我应该能够将其余部分排序。

较新的代码

正确地指出,我的类名与我假设的构造函数名称不同。所以这是经过调整的代码:

import java.util.LinkedList;

public class MyList {

public static void main(String[] args) {
    LinkedList<Integer> list = new LinkedList<Integer>();
    list.add(10);
    list.add(-20);
    MyList(list);
}

public MyList(LinkedList<Integer> list) {
    LinkedList<Integer> newList = list;
    System.out.println(newList);    
}
}

这解决了“返回类型”错误(谢谢),虽然我仍然收到“未定义”错误。

4 个答案:

答案 0 :(得分:2)

方法声明MyList中缺少的是方法的返回类型:

public MyList (LinkedList<Integer> list)

应该是

public LinkedList<Integer> MyList (LinkedList<Integer> list)

除此之外,方法名称的通常惯例是camel case,但以小写字母开头。我称之为myList而不是MyList(您应该为反映该方法目的的方法选择更好的名称)。

答案 1 :(得分:2)

如果

public MyList (LinkedList<Integer> list) {
 ...
}

应该是构造函数,该类也必须命名为MyList。你不能从构造函数返回任何东西,所以只需保留它的声明。

只需重命名您的类,将LinkedList保存到上面构造函数中的私有字段,然后将您应该实现的方法添加到MyList类。

要摆脱未定义的问题,您需要使用'new'创建列表:

MyList myList  = new MyList(list);

答案 2 :(得分:1)

这里的问题是构造函数必须与其封闭类具有相同的名称。但是,您正在尝试在名为ListClass的类中命名MyList构造函数。

因此,要么命名您的类和构造函数MyList,要么将它们命名为ListClass。

对于“未定义”问题,您无法直接调用构造函数。您必须在“新”语句中使用它,因为它用于创建类的新实例:

MyList someList = new MyList(); // variable someList will hold a new MyList instance

new MyList(); // instance without a reference variable.

答案 3 :(得分:1)

使用修改后的代码,仍有一些问题需要纠正:

  1. 在Java中,您调用构造函数以创建新的 Object 。您可能希望在将此对象作为main()方法的一部分创建时保留此对象,使用以下内容以防止出现“未定义”错误:

    MyList ml = new MyList(list);
    
  2. 作为构造函数的一部分,您只存储作为局部变量传入的LinkedList<Integer>,而不是类变量。使用您班级顶部的以下声明更正此问题:

    public class MyList {
        private LinkedList<Integer> list;
        //...
    

  3. 附加功能的结构

    为了添加下面评论中描述的附加功能,我将使用以下类型的结构(显然你仍然需要实现这些方法,但你可以看到我把它们放在哪里):

    import java.util.LinkedList;
    
    public class MyList {
        private LinkedList<Integer> list;
    
        public MyList(LinkedList<Integer> list) {
            this.list = list;
        }
    
        public LinkedList<Integer> reverse() {
            //Create a reversed list
    
            return rList;
        }
    
        public LinkedList<Integer> odd() {
            //Create a list of the odd elements
    
            return oddList
        }
    
        public LinkedList<Integer> even() {
            //Create a list of the even elements
    
            return evenList;
        }
    
        @Override
        public String toString() {
            return list.toString();
        }
    
        public static void main(String[] args) {
            LinkedList<Integer> list = new LinkedList<Integer>();
            list.add(0);
            list.add(2);
            list.add(4);
    
            MyList ml = new MyList(list);
            System.out.println("MyList: " + ml);
            LinkedList<Integer> tsil = ml.reverse();
            System.out.println("Reversed: " + tsil);
            LinkedList<Integer> ls = ml.odd();
            System.out.println("Odd: " + ls);
            LinkedList<Integer> it = ml.even();
            System.out.println("Even: " + it);
        }
    }