为什么不是"堆叠[top--];"有效的声明

时间:2014-08-19 09:52:21

标签: java arrays

我指着带箭头标记的线条。 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;

        }
    }
}

5 个答案:

答案 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)

除了stcktop需要是字段而不是局部变量(如其他答案中所述)这一事实之外,另一个问题是声明pop方法返回int,但方法正文可能(实际上是确定的)正常完成&#34;没有明确的returnthrow。对于非空方法,这是不允许的。您需要显式return从堆栈中弹出的值,并且失败案例应该抛出异常而不是仅仅打印消息。

int pop() {
  if(top == -1) {
    throw new EmptyStackException();
  }
  else {
    return stck[top--];
  }
}

同样,当堆栈已满时,让push抛出异常,而不是静默失败,这将是更惯用的java。