2015-10-05 53 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支票用作您正在查找的會員資格檢查。