0

我有一个任务,涉及创建三个操作链表的方法。说明指示我使用以下构造函数:

 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 定义,在“public 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

4 回答 4

2

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

public MyList (LinkedList<Integer> list)

应该是这样的

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

除此之外,方法名称的通常约定是驼峰式,但以小写字母开头。我会调用它myList而不是MyList(您应该为该方法选择一个更好的名称,以反映该方法的目的)。

于 2012-08-21T14:15:29.010 回答
2

如果

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

应该是Constructor,该类也必须命名MyList。您不能从构造函数返回任何内容,因此只需保留它的声明即可。

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

要摆脱未定义的问题,您需要使用“新”创建列表:

MyList myList  = new MyList(list);
于 2012-08-21T14:16:34.737 回答
1

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

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

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

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

或者

new MyList(); // instance without a reference variable.
于 2012-08-21T14:17:10.927 回答
1

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

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

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

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

附加功能的结构

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

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);
    }
} 
于 2012-08-21T14:45:37.633 回答