我必須創建一個程序來模擬計算器。我們必須在Operator類中使用HashMap,但我不知道如何去做這件事。我理解它的基本邏輯是。我們發送程序一個簡單的表達式,如1 + 2-3 * 4/5。然後程序將把它分成兩堆。一個帶有運算符,另一個帶有操作數。在分割字符時,我們必須檢查運算符的散列表,然後將它推送到堆棧,這就是我卡住的地方。如何/在哪裏放置/使用散列圖?我的代碼如下:Java - 如何使用散列表映射簡單的數學運算符
import java.util.*;
public class Evaluator {
private Stack<Operand> opdStack;
private Stack<Operator> oprStack;
public Evaluator() {
opdStack = new Stack<Operand>();
oprStack = new Stack<Operator>();
} // end constructor
public int eval(String expr) {
String tok;
expr = expr + "!";
String delimiters = "+-*/#! ";
StringTokenizer st = new StringTokenizer(expr, delimiters, true);
while (st.hasMoreTokens()) {
tok = st.nextToken();
if(!tok.equals(" ")) {
if(Operand.check(tok)){
opdStack.push(new Operand(tok));
}
else{
if (!Operator.check(tok)) {
System.out.println("*****invalid token******\n");
System.exit(1);
} // end if
} // end else
} // end if
} // end while
return 0;
} // end eval
} // end Evaluator
abstract class Operator {
static HashMap operators = new HashMap();
public abstract int priority();
static boolean check(String tok) {
boolean result = false;
operators.put("#", new PoundOperator());
operators.put("!", new ExclamationOperator());
operators.put("+", new AdditionOperator());
operators.put("-", new SubtractionOperator());
operators.put("*", new MultiplicationOperator());
operators.put("/", new DivisionOperator());
if (operators.containsKey(tok)) {
result = true;
}
return result;
} // end check
public abstract Operand execute(Operand opd1, Operand opd2);
} // end Operator
任何幫助/澄清深表讚賞。 謝謝。
您是在問「給定關鍵字,我如何從Map獲取相應的值?」? – immibis 2015-02-07 04:06:12