我的作业涉及创建三个操纵链表的方法。说明书要求我使用以下构造函数:
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);
}
}
这解决了“返回类型”错误(谢谢),虽然我仍然收到“未定义”错误。
答案 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)
使用修改后的代码,仍有一些问题需要纠正:
在Java中,您调用构造函数以创建新的 Object 。您可能希望在将此对象作为main()
方法的一部分创建时保留此对象,使用以下内容以防止出现“未定义”错误:
MyList ml = new MyList(list);
作为构造函数的一部分,您只存储作为局部变量传入的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);
}
}