我创建了一个简单的列表类。我想做的是在SLList中创建一个方法来为SLList对象提供大小。我想递归地执行此操作,但是,我创建的以下size()方法不起作用。我知道实现它的其他方法,例如创建一个辅助方法。但是我很好奇的是,为什么我的size()不起作用?错误消息是“未为SLList.IntNode定义size()”。为什么?由于我将嵌套的IntMode类设为公开且非静态的,所以为什么它不能使用SLList类中定义的方法?
public class SLList {
public class IntNode {
public int item;
public IntNode next;
public IntNode(int i, IntNode n) {
item = i;
next = n;
}
}
private IntNode first;
public SLList(int x) {
first = new IntNode(x, null);
}
public int size() {
if (first.next == null) {
return 1;
}
return 1 + first.next.size();
}
}
我刚接触Java,对私有和静态事物非常困惑,尤其是在涉及Class时。谢谢您回答我。
答案 0 :(得分:0)
原因是:您的方法 size()
在类 SLList 中。
因此nested inner class
IntNode
无法访问它。
答案 1 :(得分:0)
您可以通过添加一个额外的私有方法来摆弄它,但这并不是特别容易推论。除非绝对必要,否则我将避免这样做。
class SLList {
public class IntNode {
public int item;
public IntNode next;
public IntNode(int i, IntNode n) {
item = i;
next = n;
}
private int theSize()
{
return size();
}
}
private IntNode first;
public SLList(int x) {
first = new IntNode(x, null);
}
public int size() {
if (first.next == null) {
return 1;
}
return 1 + first.next.theSize();
}
}
答案 2 :(得分:0)
size()
是SLList
而非IntNode
的方法。您可以在IntNode
中引用外部类方法,如下所示:
public class SLList {
public class IntNode {
...
public int size() {
return SLList.this.size();
}
}
...
public static int size() {
...
}
}
答案 3 :(得分:0)
向IntNode类添加一个size方法,并从SLList size方法访问它,以计算列表的整个大小。以下代码段不言自明。有关嵌套类的更多信息,请参见https://www.programiz.com/java-programming/nested-inner-class
public class SLList {
public class IntNode {
public int item;
public IntNode next;
public IntNode(int i, IntNode n) {
item = i;
next = n;
}
public int size() {
IntNode tmp = next;
if (tmp == null) {
return 1;
}
return 1 + tmp.size();
}
}
private IntNode first;
public SLList(int x) {
first = new IntNode(x, null);
}
public int size() {
if (first == null)
return 0;
return first.size();
}
public static void main(String[] args) {
SLList list = new SLList(10);
list.first.next = list.new IntNode(20, null);
list.first.next.next = list.new IntNode(30, null);
list.first.next.next.next = list.new IntNode(40, null);
System.out.println(list.size());
}
}