一、代码
直接上代码,整个代码分为两个类calc.StackCalculator.java,calc.Calculator.java
1、StackCalculator.java
/**
* 用栈实现表达式的运算v1.0
* 支持运算:+、-、*、/、%、^、!、()
* 输入的表达式需以"#"结束
*/
package calc;
import java.util.Stack;
public class StackCalculator {
private Stack<Character> optr = new Stack<Character>();// 操作符栈
private Stack<Float> opnd = new Stack<Float>();// 操作数栈
private final Character END_Character = '#';// 输入表达式的结束字符
public final int ADD = 0, SUB = 1, MUL = 2, DIV = 3, MOD = 4, POW = 5, FAC = 6, L_P = 7, R_P = 8, EOF = 9;
public final char[][] PRI = {
//运算符优先等级 [栈顶]'levle'[当前]
// |----------------当前运算符----------------|
// + - * / % ^ ! ( ) #(结束字符)
/* + */ {
'>','>','<','<','<','<','<','<','>','>'},
/* - */ {
'>','>','<','<','<','<','<','<','>','>'},
/* 栈 * */ {
'>','>','>','>','>','<','<','<','>','>'},
/* 顶 / */ {
'>','>','>','>','>','<','<','<','>','>'},
/* 运 % */ {
'>','>','>','>','>','<','<','<','>','>'},
/* 算 ^ */ {
'>','>','>','>','>','>','<','<','>','>'},
/* 符 ! */ {
'>','>','>','>','>','>','>',' ','>','>'},
/* ( */ {
'<','<','<','<','<',