我在堆栈的帮助下写一个程序。我必须解码输入。例如,单词"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]是一个合法的元素。也许对堆栈及其实现和操作进行一些回顾是有必要的?