2015-10-05 52 views
0

我正在尝试编写一个程序来评估后缀表达式。我的想法是叠加操作数,然后在操作员出现时弹出必要的操作数。我试图检查输入是操作数是操作符还是操作数,但是这个开始代码的唯一“if”语句在||的第一个实例处返回“error:illegal start of expression”。我是否缺少转义字符或其他东西?提前致谢。非法开始表达式java运算符

public class Evaluate{ 
char input[] = new char[50]; 
Stack operands = new Stack(); 

    public string Evaulate(string input){ 
     for (int k = 0; input[k] != null; k++){ 
      char symb = input.charAt[k]; 
      if (symb != (+ || - || * ||/|| $){ 
       operands.push(symb); 
      } 
     } 
    } 
} 
+1

不应该是'('+'||' - '||'*'||'/'||'$')'。但是你也不能这样做。你必须每次比较一下'symb!='+'|| symb!='-'...' –

+0

你需要把它们当作字符,而不是文字操作符。把它们全部放在单引号中。你需要对每一个进行不同的比较,就像@ redflar3所说的那样。 –

+3

你的代码中有太多错误,你可以考虑阅读一些Java的介绍。 – Roman

回答

2

一开始,条件不甚工作方式:

if (symb != (+ || - || * ||/|| $) ... 

你应该做的是先用字符而不是“裸”的Java令牌(或$比较它们)。

你也应该做每个||之间或比较,因为你使用负逻辑这里检测非运营商,&&

if ((symb != '+') && (symb != '-') && ... 

还有一些其他的问题在我没有提到的代码中,但是这应该解决你的直接问题。

1

表达

symb != (+ || - || * ||/|| $ 

不是在Java中有效。即使是在关闭括号和报价的符号,像这样经过:

symb != ('+' || '-' || '*' || '/' || '$') 

仍然无效。你可能会想要它意味着它没有,根据我们在英语中使用“或”的方式(即“符号不是加号或减号或星号或斜线或美元符号”)。 。但是Java不会那样做。

幸运的是有一种更好的方法,以确定一个字符(在这种情况下symb)是否是一组特定的字符的之一:

if ("+-*/$".indexOf(symb) >= 0) { 

此计算的symb字符串"+-*/$"内的位置,其,如果symb是所需字符之一,则为0,1,2,3,4或5.如果不是,则表达式返回-1。因此,>=0支票用作您正在查找的会员资格检查。