定义异常类
public class ExpressionException extends RuntimeException {
private static final long serialVersionUID = 1L;
public ExpressionException() {}
public ExpressionException(String message) {
super(message);
}
}
利用栈的知识进行编程实现
public class Expression {
private String expr;
//初始化表达式
public Expression(String expr) {
this.expr = expr;
}
public int compute() {
//定义运算数栈
char[] OPND = new char[10];
//定义运算符栈
char[] OPTR = new char[10];
//OPTR初始化为定界符
OPTR[0] = '#';
//两栈栈顶初始化
int top1 = -1, top2 = 0;
char[] chars = expr.toCharArray();
//依次读取表达式字符
for (int i = 0; i = 48 && chars[i] oper1高
//0->相同
//-1->oper1低
switch (oper1) {
case '+':
case '-':
if (oper2 == '(' || oper2 == '#') {
return 1;
} else {
return -1;
}
case '*':
case '/':
if (oper2 == '*' || oper2 == '/') {
return -1;
} else {
return 1;
}
case '(':
return 1;
case ')':
if (oper2 == '(') {
return 0;
} else {
return -1;
}
case '#':
if (oper2 == '#') {
return 0;
} else {
return -1;
}
default:
throw new ExpressionException("符号无法识别");
}
}
}
测试类:
public class ExpressionTester {
public static void main(String[] args) {
Expression expression = new Expression("(4+2)*3-5#");
int result = expression.compute();
System.out.println("运算结果为:" + result);
}
}
测试结果:
运算结果为:13
这样,一个简单的算术表达式求值的问题就解决了。
流程分解这里只能支持十以内的算术,大家想必也能发现了,毕竟是用char做的……见谅……