계산기를 시뮬레이트하는 프로그램을 만들어야합니다. 우리는 연산자 클래스에서 해시 맵을 사용해야하지만 어떻게해야할지 모르겠습니다. 내가 이해할 수있는 기본 논리입니다. 우리는 1 + 2-3 * 4/5와 같은 간단한 표현을 프로그램에 보냅니다. 그러면 프로그램은이를 두 개의 스택으로 나눕니다. 하나는 연산자와 하나는 피연산자를 사용합니다. 문자를 나눌 때 우리는 연산자에 대한 해시 맵을 확인한 다음 스택으로 밀어 넣어야합니다. 이것이 내가 붙어있는 곳입니다. 어떻게/어디에서 해시 맵을 배치/사용합니까? 내 코드는 다음과 같습니다 :자바 - 해시 맵을 사용하여 간단한 수학 연산자를 매핑하는 방법
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
어떤 도움이나 설명이 깊은 감사하겠습니다. 감사합니다.
"키를 감안할 때 맵에서 해당 값을 얻으려면 어떻게해야합니까?"라고 묻는 중입니까? – immibis