我会说这是我一直是Stack Overflow的老粉丝,在过去的几个学期里,我通常能够找到所有问题的答案,而不是真正问一个问题。但是,我一直遇到堆栈程序问题。代码多于此,但我认为我已将问题缩小到这一个错误。它声明
线程“main”中的异常java.lang.Error:未解析的编译 问题:
无法对非静态字段Stack1进行静态引用 构造函数Stack(int)未定义
at stack.main(stack.java:11)
任何人都可以解释这个问题是什么吗?或者更好的是,把我指向可以解释它的某个地方?我试过在Overflow和谷歌上查找它,但我认为不知道我实际上在寻找什么和/或疲劳的组合阻止我找到一个具体的答案。在此先感谢您的帮助。
public class stack {
private Object[] Stack1;
private int topOfStack;
private int max;
//private int empty;
//private int capacity;
public static void main(String[] args) {
Stack1 = new Stack(5);
}
public Stack(int size) {
if (size < 0){
throw new IllegalArgumentException("Parameter must be >0. Parameter was " + size + ".");
}
max = size;
Stack1 = (Object[]) (new Object[size]);
topOfStack = -1;
}
}
答案 0 :(得分:1)
将您的类重命名为“Stack”(大写)并更改行:
Stack1 = new Stack(5)
为:
Stack stack1 = new Stack(5);
答案 1 :(得分:1)
在以下行中 -
private Object[] Stack1;
Stack1
不是静态。
在下文中,您尝试引用Stack1
-
public static void main(String[] args) {
Stack1 = new Stack(5);
}
来自main
内静态。
因此 -
无法对非静态字段Stack1进行静态引用
您的构造函数名称Stack
与类名stack
不匹配。所以 -
构造函数Stack(int)未定义
可能是,您想要为您的班级Stack
以及main
以下内容命名 -
public static void main(String[] args) {
Stack stack1 = new Stack(5);
}
答案 2 :(得分:0)
您的班级被声明为stack
小写。
答案 3 :(得分:0)
Stack1
是stack
类的实例变量。在静态main方法中,即使它是一个实例变量,也会尝试在Stack1
变量中存储一个值。此外,您尝试将非数组类型分配给类型为{{1>}的数组的变量。此外,您有Object
的构造函数(注意大写),即使该类以小写形式调用Stack
。
答案 4 :(得分:0)
保持小写类声明,我猜测作业
Stack1 = new Stack(5);
不是你的意思。相反:
Stack1 stack = new stack(5);