首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算中缀表达式

计算中缀表达式
EN

Stack Overflow用户
提问于 2013-12-01 09:32:18
回答 1查看 180关注 0票数 0

我的代码中出现了一个小错误。当我输入8*(9-2)时。我得到了错误的答案。我想是因为这个if语句-

代码语言:javascript
复制
if ((token.getName().equals("rparen") || 
     temp.equals("lparen")) || 
    (token.getName().equals("rbracket")||
     temp.equals("lparen")) || 
     token.getName().equals ("rcurley"))

当我删除temp.equals("lparen")时,它可以正常工作。但是当我键入另一个等式([57 -50)*4+8]*4时,我得到了一个144答案,但它应该是一条错误消息。下面是我的方法:

代码语言:javascript
复制
public double factor () 
{ 
    double result = 0; 
    if (token.getName ().equals ("digit")) 
    { 
        result = token.getValue (); 
        System.out.print ("" + token.getValue () + " "); 
        token.getToken (); 
    } 
    else 
    if (token.getName ().equals ("lparen")||token.getName ().equals ("lbracket")||token.getName ().equals ("lcurley")) 
    { 
        String temp =token.getToken();
        token.getToken (); 

        if ((token.getName ().equals ("rparen")||temp.equals("lparen"))||(token.getName ().equals ("rbracket")||temp.equals("lparen"))||token.getName ().equals ("rcurley")) 
            token.getToken (); 
        else 
            System.out.print ("Error - missing right paren"); 
    } 
    else 
        System.out.print ("Error - invalid token"); 
    return result; 
} // method factor 
EN

回答 1

Stack Overflow用户

发布于 2013-12-01 10:08:03

我猜在这里,但似乎你错过了一个递归调用。两个圆括号之间的值应该是任何有效的表达式。看起来你想改变

String temp =token.getToken();

至:

代码语言:javascript
复制
moveToNextToken();     // or however you call this method
result = factor();     // to read any valid factor inside the parentheses

或者有可能:

代码语言:javascript
复制
moveToNextToken();         // or however you call this method
result = anyExpression();  // to read any valid expression inside the parentheses

此外,检查匹配的右括号的if似乎是错误的。它应该是or's和and's的混合体,而不仅仅是or:

代码语言:javascript
复制
(openingToken.equals ("rparen")|| currentToken.getName().equals("lparen"))

更改为:

代码语言:javascript
复制
(openingToken.getName().equals ("rparen") && currentToken.getName().equals("lparen"))

如果不这样做,就不能真正匹配左括号和右括号。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20307748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档