我可以用堆栈弹出2次吗? (JAVA)

时间:2016-10-17 19:35:12

标签: java stack

我在堆栈的帮助下编写程序。我必须解码输入。例如,' he-llo'这个词变成了' hllo',但我得到了'你好'。 ' - '应该具有删除前面和后面的字符的效果。 我知道我必须使用pop(我实现了自己的),但我连续两次使用它有问题。因为我实际上已经打印过' e'在第一个if语句中。我真的对如何解决这个问题一无所知,我打错了吗?或者我应该调整我的流行代码?

//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());
    }
}

2 个答案:

答案 0 :(得分:0)

你的问题是关于连续两次使用pop - 是的,只要top代表堆栈中的至少两个对象,它就应该工作

如果您的实现使用数组,那么对于pop来说,Stack的语义有些错误。堆栈顶部(顶部)应该是您看到的对象;你的pop使用top - 1.其次,没有必要将弹出的对象设置为0,如果正确实现了Stack,push方法应该覆盖该值。

鉴于上述情况,未正确使用空测试;空的应该测试顶部<如果是,则返回0,否则返回false。 stack [0]是一个合法的元素。或许对堆栈及其实现和操作进行了一些检查?

答案 1 :(得分:-1)

每当我进行字符串操作时,我总是使用StringBuilder。它太有用了!

试试这个;

// please name this method properly
public static String someMethod(String str) {
    StringBuilder builder = new StringBuilder(str);
    for (int i = 0 ; i < builder.length() ; i++) {
        if (builder.charAt(i) == '-') {
            builder.deleteCharAt(i);
            if (i > 0) {
                builder.deleteCharAt(i - 1);
                i--;
            }
        }
    }
    return builder.toString();
}