這是到目前爲止我的代碼:後綴計算器,如何處理連續3個數字?
public class PostfixCalculator {
private Stack<Float> stack;
private float result;
private Boolean isOperator (char op){
boolean operator;
switch (op){
case '+':
case '-':
case '*':
case '/':
case '^':
operator = true;
break;
default:
operator = false;
break;}
return operator;
}
private Boolean isFunction (String func){
String[] functions = {"sin", "cos", "max"};
for (int i=0; i<functions.length; i++){
if (func.equals(functions[i]))
return true; }
return false;
}
private void computeOperator (float op1, float op2, char op){
switch (op){
case '+':
result = op1 + op2;
break;
case '-':
result = op1 - op2;
break;
case '/':
result = op1/op2;
break;
case '*':
result = op1 * op2;
break;
case '^':
result = (float) Math.pow(op1, op2);
break;
default:
break;
}
}
public float calculate(String expr) throws IllegalArgumentException {
result = 0;
String token;
Float makeit;
char operator;
float op1, op2, pushFloat;
StringTokenizer calc=new StringTokenizer(expr);
stack = new Stack<Float>();
while (calc.hasNextToken()){
token=calc.getNextToken();
operator=token.charAt(0);
if (!(this.isOperator(operator))){
if (this.isFunction(token)){
if (token.equals("sin")){
op1=stack.pop();
result = (float) Math.sin(op1);
stack.push(result);
}
else if (token.equals("cos")){
op1=stack.pop();
result = (float) Math.cos(op1);
stack.push(result);
}
else if (token.equals("max")){
op1=stack.pop();
op2=stack.pop();
result=Math.max(op1, op2);
stack.push(result);
}
}
else {
makeit = new Float(token);
pushFloat = makeit.floatValue();
stack.push(pushFloat);
}
}
else {
op1 = stack.pop();
op2 = stack.pop();
computeOperator (op1, op2, operator);
stack.push(result);
}
}
return stack.pop();
}
}
我想我有下來的基礎,但如何處理後綴的計算與連續三位數以上,像例如'2 3 4 * - '?任何幫助,將不勝感激。提前致謝!
爲了保持一致性/可理解性,'result'應該是本地的,'computeOperator'應該返回一個你賦給'result'的值。 –
並且有兩個功能 - computeMonadic和computeDiadic。在computeDiadic中處理max和你的「操作符」。將isOperator替換爲isMonadic或isDiadic。 (不需要使用charAt - 只需將所有運算符/函數名稱視爲字符串即可。) –
如果想要使用charAt,可以使用'Operator'類或類似方法,併爲每個運算符/函數創建子類。構建一個Operator子類和索引的數組以查找您的操作。 (但這將是「額外的功勞」)。 –