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);
}
}
有人有什么想法吗?
答案就在错误消息中:
无法对非静态字段堆栈进行静态引用。
您的堆栈
字段是实例字段。main
是一个静态
方法,此时没有实例。如果要使用堆栈
,则需要一个实例,例如:
IntegerStackGeneric isg = new IntegerStackGeneric();
isg.stack.push(/*...*/);
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);
}
问题内容: 由于它可能是Java语言中使用最广泛的方法之一,因此为什么它必须接受字符串数组并且没有它就无法工作?例如,我可以一直住: 过度 除了能够接受命令行参数之外,还有其他更高的目的吗,尤其是因为绝大多数Java程序都是GUI驱动的,并且不需要通过命令行接收args? 问题答案: 甚至GUI驱动的Java应用程序也将从某些主要方法开始。“更高的目的”从来没有接受命令行参数。 目的只是接受参数。
问题内容: 之间有什么区别: 和 我不相信,但是我想知道。 问题答案: 从语义上讲,它们是相同的。但是,我建议在声明数组时使用后一种语法()。以前的语法主要用于与C语法兼容。 因为总体上来说,它是Java中对象的类型,所以它更加一致,而且很清楚不要将其拆分。
在上面的代码中,为什么在< code>main()中强制提到< code>String args[]以及为什么我们得到< code > "[ljava . lang . String;@174e5edb"作为输出?
我只是想知道为什么有必要在main方法中使用String args[]。 我知道它用于命令行参数,但每次我们运行程序时,命令行是不必要的。 提前感谢您的回答。
我写了一些带
问题内容: 我知道String [] args是作为参数传递给main的字符串数组。 但是,当您不将其包含为参数时(即使您不使用它),它也会引发异常。那么为什么需要它呢?另外,为什么不能是int []或boolean []? 问题答案: 这是一个字符串,因为命令行以文本形式表示。如果要将文本转换为整数或布尔值,则必须自己做- 操作系统或Java引导程序如何确切知道您希望如何解析所有内容?我想Jav