2

我将首先说我一直是 Stack Overflow 的长期粉丝,在过去的几个学期中,我通常能够找到所有问题的答案,而无需真正提出问题。但是,我一直遇到堆栈程序的问题。还有比这更多的代码,但我认为我已经将我的问题缩小到这个错误。它指出

线程“main”java.lang.Error 中的异常:未解决的编译问题:

无法对非静态字段 Stack1 进行静态引用
构造函数 Stack(int) 未定义

在 stack.main(stack.java:11)

谁能解释这个问题可能是什么?或者更好的是,给我指出一个可以解释它的地方?我已经尝试在溢出和谷歌上查找它,但我认为不知道我实际在寻找什么和/或疲劳使我无法找到具体的答案。感谢您提前提供任何帮助。

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;
}
   }
4

5 回答 5

1

重命名您的类“Stack”(大写)并更改行:

Stack1 = new Stack(5)

至:

Stack stack1 = new Stack(5);
于 2011-10-05T03:21:31.870 回答
1

在以下行中 -

private Object[] Stack1;

Stack1不是静态的。

在下面你试图参考Stack1-

public static void main(String[] args) {
    Stack1 = new Stack(5);
}

main里面是静态的。

因此 -

无法对非静态字段 Stack1 进行静态引用

您的构造函数名称 isStack与类名称 is 不匹配stack。所以 -

构造函数 Stack(int) 未定义

可能是,您想命名您的班级Stack并在main以下内容中 -

public static void main(String[] args) {
    Stack stack1 = new Stack(5);
}
于 2011-10-05T03:23:22.530 回答
0

您的类被声明为stack小写。

于 2011-10-05T03:05:40.233 回答
0

Stack1stack类的实例变量中。在您的静态 main 方法中,您尝试在Stack1变量中存储一个值,即使它是一个实例变量。此外,您尝试将非数组类型分配给类型为数组的变量ObjectStack此外,即使类以小写形式调用,您也有一个构造函数(注意大写) stack

于 2011-10-05T03:09:06.300 回答
0

保持小写类声明,我猜是分配

   Stack1 = new Stack(5);

不是你的意思。相当:

Stack1 stack = new stack(5);
于 2011-10-05T03:12:42.277 回答