我指着带箭头标记的线条。 Java编译器说这个表达式无效。为什么呢?
我是java的初学者,提前谢谢:)
class stack {
stack(int size) {
private int top = -1;
private int stck[] = new int[size];
}
void push(int item) {
if (top == stck.length - 1)
System.out.println("StackFull");
else
stck[++top] = item;
}
int pop ()
{
if (top == -1) System.out.println("StackEmpty");
else
stck[top--] ; <<========= Java Compiler says this expression isnt valid why ?
}
void Display() {
for (int x : stck) {
System.out.println(x);
return;
}
}
}
答案 0 :(得分:1)
因为你没有正确地声明top
成员变量,所以你在构造函数中做了它,但是它应该在类范围内:
class Stack {
private int top = -1 ;
private int stck[];
// constructor
public Stack(int size) {
stck = new int[size];
}
}
如果在类构造函数中声明变量,它将只是局部变量,并且对其余方法不可见
答案 1 :(得分:0)
这不是stck[top--] ;
的问题。您需要在此处引入变量,否则它不是有效的Java
语句
像
int a=stck[top--];
不仅在这里,而且你也会有以下错误
int[] arr=new int[5];
arr[2]; // not a valid statement
您需要将其分配给变量
int ex=arr[2];
答案 2 :(得分:0)
问题1:
class Stack {
private int top = -1 ;
private int stck[] = new int[SIZE] ;
public Stack() {
}
}
问题2:
int poppedItem = stck[top--];
答案 3 :(得分:0)
stck[top--] ;
只是访问一个数组元素 - 它不会对它做任何事情。这在Java中是不允许的,因为它通常意味着您忘记使用该值执行某些操作。
在这种情况下,我猜你想:
return stck[top--];
但是,您还需要正确处理“堆栈空”案例。您仍然需要退出该方法;我建议你应该在这种情况下抛出异常。
答案 4 :(得分:0)
除了stck
和top
需要是字段而不是局部变量(如其他答案中所述)这一事实之外,另一个问题是声明pop
方法返回int
,但方法正文可能(实际上是确定的)正常完成&#34;没有明确的return
或throw
。对于非空方法,这是不允许的。您需要显式return
从堆栈中弹出的值,并且失败案例应该抛出异常而不是仅仅打印消息。
int pop() {
if(top == -1) {
throw new EmptyStackException();
}
else {
return stck[top--];
}
}
同样,当堆栈已满时,让push
抛出异常,而不是静默失败,这将是更惯用的java。