我的代码中出现了一个小错误。当我输入8*(9-2)时。我得到了错误的答案。我想是因为这个if语句-
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答案,但它应该是一条错误消息。下面是我的方法:
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 发布于 2013-12-01 10:08:03
我猜在这里,但似乎你错过了一个递归调用。两个圆括号之间的值应该是任何有效的表达式。看起来你想改变
String temp =token.getToken();
至:
moveToNextToken(); // or however you call this method
result = factor(); // to read any valid factor inside the parentheses或者有可能:
moveToNextToken(); // or however you call this method
result = anyExpression(); // to read any valid expression inside the parentheses此外,检查匹配的右括号的if似乎是错误的。它应该是or's和and's的混合体,而不仅仅是or:
(openingToken.equals ("rparen")|| currentToken.getName().equals("lparen"))更改为:
(openingToken.getName().equals ("rparen") && currentToken.getName().equals("lparen"))如果不这样做,就不能真正匹配左括号和右括号。
https://stackoverflow.com/questions/20307748
复制相似问题