我可以弹出2次与堆栈?(java)



我在堆栈的帮助下写一个程序。我必须解码输入。例如,单词"he- hello"变成了"hello",但我得到的却是"hello"。"-"应该具有删除它前面的字符及其本身的效果。我知道我必须使用pop(这是我自己实现的),但是连续两次使用它会有问题。因为实际上我已经在第一个if语句中打印了" e "我真的不知道如何解决这个问题,我打印错了吗?还是我应该调整我的pop代码?

//my pop code
public char pop() {
    if(!this.empty()){
        if(top > 0){
            temp = arr[top - 1];
            arr[top -1] = 0;
            top = top -1;
        }
        return temp;
    }else{
        return 0;
    }
    //handling the charachters of the input
    if(Character.isLetter(ch) || Character.isDigit(ch)){
         Stack.push(ch);    
         System.out.println(myStack.peek());
    }
    if(Stack.peek() == '-'){
         myStack.pop();
         myStack.pop();
         System.out.println(Stack.peek());
    }
}

你的问题是关于在一行中使用pop两次——是的,只要top代表堆栈上至少两个对象,那就应该工作

如果您的实现使用数组,那么Stack的

语义对于pop会有一些错误。栈顶(top)应该是你看到的对象;你爸爸用的是top - 1。其次,没有必要将弹出的对象设置为0,如果栈正确实现,push方法应该覆盖该值。

在上述情况下,

空测试不能正确使用;空应测试顶部<0,如果是则返回true,否则返回false。Stack[0]是一个合法的元素。也许对堆栈及其实现和操作进行一些回顾是有必要的?

最新更新