pop()堆栈似乎没有删除值

时间:2014-05-12 02:23:21

标签: java stack

该程序应该读取字符串输入的值并返回结果。

然而,当我使用

System.out.println(Arrays.toString(stack.toArray()));

在最后检查堆栈的样子,或者甚至在程序期间,我注意到堆栈中的pop()方法似乎没有删除它返回的元素。

我可能正在做一些可怕的错误,但我无法弄明白。

我真的很感激任何见解!

// Test example : (((1+1)+1)+1)

import java.util.*;

public class Task2 
{
public static void main(String[] args) //run Start() method
{
    System.out.print("Enter an expression, or press Enter to quit: ");

    Stack<String> stack = new Stack<String>();

    Scanner scanner = new Scanner(System.in);

    String n = scanner.nextLine();

    if(!n.isEmpty())
    {
        for(int i = 0 ; i < n.length() ; i++)
        {
            if(!(n.charAt(i) == ')'))
            {
                stack.push(n.charAt(i) + "");
            }
            else
            {
                int two = Integer.parseInt(stack.pop());
                char op = (stack.pop()).charAt(0);
                int one = Integer.parseInt(stack.pop());

                switch(op)
                {
                    case '+':{stack.push((one + two) + "");}
                    case '-':{stack.push((one - two) + "");}
                    case '*':{stack.push((one * two) + "");}
                    case '/':{stack.push((one / two) + "");}
                }
            }
        }
    }
    else
    {
        System.out.print("\ngoodbye");

        System.exit(0);
    }
  }
}

很抱歉缺少评论,谢谢!

1 个答案:

答案 0 :(得分:3)

这是我的第一个解决方案,所以要温柔:D。问题不在于pop(),因为pop正在做它应该做的事情。您忘记在switch语句中添加断点。它完成了每一个操作,并将它添加到堆栈中,给人一种流行音乐无效的错觉。我会把打印部分留给你。欢呼声。

                switch(op)
                {
                case '+':
                    stack.push((one + two) + "");
                    break;
                case '-':
                    stack.push((one - two) + "");
                    break;
                case '*':
                    stack.push((one * two) + "");
                    break;
                case '/':
                    stack.push((one / two) + "");
                    break;
                }