【问题标题】:Comparing string values, infix to postfix比较字符串值,中缀到后缀
【发布时间】:2014-05-08 12:11:26
【问题描述】:
    Stack<String> s = new Stack<String>();
    String[] tokens = infix.split(" ");

    StringBuilder output = new StringBuilder();

    Integer.getInteger("+", 1);
    Integer.getInteger("-", 1);
    Integer.getInteger("*", 2);
    Integer.getInteger("/", 2);

    for (int i = 0; i < tokens.length; i++)
    {
        if (tokens[i].matches("[0-9]"))
        {
            output.append(tokens[i] + " ");
        }
        else if (tokens[i].equals("+") || tokens[i].equals("-") || tokens[i].equals("*") || tokens[i].equals("/"))
        {
            if(tokens[i] <= s.peek())
            {

            }
        }
    }

    return output.toString();

我正在为后缀计算器做一个中缀,我试图说明当前令牌值是否小于或等于堆栈顶部令牌的值。我使用 Integer.valueOf 将数值设置为特定标记,但不能使用 "

【问题讨论】:

  • 呃,Integer.valueOf("+", 1); 要爆炸了。 “+”不是数字。

标签: java stack calculator postfix-notation infix-notation


【解决方案1】:
if (tokens[i].equals("-") || tokens[i].equals("+") || tokens[i].equals(s.peek)) 

这会执行您正在尝试做的事情,尽管它可能不那么美味。

我会坚持使用 if 语句而忘记分配权重,但如果您坚持以下将起作用。

另一种选择是将每个运算符映射到一个数值,如果您需要给运算符一个数值:

HashMap<String, Integer> operators = new HashMap<String, Integer>();

operators.put("+", 1);
operators.put("-", 1);
operators.put("*", 2);
operators.put("/", 2);

【讨论】:

  • 我把它改成了getInteger
  • 我还不知道 hashmaps,用那个感觉不太好
  • @user3427042 如果您想为 Set 或 Map 分配权重,我认为您的处理方式不正确。尽管您可以坚持使用上述 if 语句这样的字符串,而不必担心。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-15
  • 2018-07-12
  • 2021-06-08
  • 1970-01-01
相关资源
最近更新 更多