你在这里看到的代码有点未完成;但我正在尝试测试推送和弹出功能。但是我不断收到一条错误消息:
无法对非静态字段堆栈进行静态引用。
import java.util.ArrayList;
import java.util.Iterator;
import java.util.NoSuchElementException;
class IntegerStackGeneric extends IntegerStack {
ArrayList<Integer> stack;
IntegerStackGeneric() {
stack = new ArrayList<>();
}
public void push(int x) {
stack.add(x);
return;
}
public int pop() throws NoSuchElementException {
if(!stack.isEmpty()) {
throw new NoSuchElementException("IntegerStackGeneric: pop()");
}
return stack.remove(stack.size()-1);
}
public int size() {
return stack.size();
// return -1;
}
public boolean contains(int x) {
return false;
}
public void reverse() {
return;
}
public Iterator<Integer> iterator() {
return new ArrayList<Integer>().iterator();
}
public static void main(String[] args) {
stack.push(1);
stack.push(2);
stack.push(3);
System.out.println(stack);
System.out.println(stack.pop());
System.out.println(stack);
}
}
有没有人有任何想法?
答案 0 :(得分:1)
答案就在错误信息中:
无法对非静态字段堆栈进行静态引用。
您的stack
字段是实例字段。 main
是static
方法,此时没有实例。如果您想使用stack
,则需要一个实例,例如:
IntegerStackGeneric isg = new IntegerStackGeneric();
isg.stack.push(/*...*/);
您可能希望将逻辑放在从main
调用的实例方法中,而不是直接放在main
中:
IntegerStackGeneric isg = new IntegerStackGeneric();
isg.doStuff();
和
private void doStuff() {
stack.push(1);
stack.push(2);
stack.push(3);
System.out.println(stack);
System.out.println(stack.pop());
System.out.println(stack);
}