/**
*只写了10以内的
*/
public class Test04 {
public static void main(String[] args) {
String s = "5+6*4-3+8-4*3=";
char[] c = s.toCharArray();// 拆分字符串
NumStack ns = new NumStack();// 得到数字堆栈
OpStack os = new OpStack();// 得到字符堆栈
// 遍历字符数组
for (int i = 0; i < c.length; i++) {
if (isNum(c[i])) {
// 如果是数字就压入数字堆栈
ns.push(c[i] - 48);
System.out.println(c[i] - 48);
}
if (isOp(c[i])) {
calculation(c[i], ns, os);
}
if (c[i] == '=') {
while(!os.isEmpty()){
int j=operate(ns.pull(), ns.pull(), os.pull());
ns.push(j);
}
System.out.println(ns.pull());
}
}
for (int i = 0; i < ns.temp; i++) {
System.out.println(ns.pull());
}
}
private static void calculation(char c, NumStack ns, OpStack os) {
// 如果是运算符就压入运算符堆栈
System.out.println(c);
if (os.isEmpty()) {
os.push(c);
} else {
if (!isPriority(c)) {
int j = operate(ns.pull(), ns.pull(), os.pull());
ns.push(j);
System.out.println(j);
calculation(c, ns, os);
} else {
os.push(c);
}
}
}
public static int operate(int a, int b, char c) {
System.out.println(a + " " + c + b);
switch (c) {
case '+':
return b + a;
case '-':
return b - a;
case '*':
return b * a;
case '/':
return b / a;
default:
return 0;
}
}
/**
* 判断是否为加减,确定优先级的方法
* @param c
* @return
*/
public static boolean isPriority(char c) {
if (c == '+' || c == '-') {
return false;
} else {
return true;
}
}
/**
* 判断是否为数字的方法
*
* @param c
* @return
*/
public static boolean isNum(char c) {
switch (c) {
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
return true;
}
return false;
}
/**
* 判断是否为运算符
*
* @param c
* @return
*/
public static boolean isOp(char c) {
switch (c) {
case '+':
case '-':
case '*':
case '/':
return true;
}
return false;
}
}
***************************************************************************
/**
* 数字堆栈
* @author SuXiaoXi
*/
public class Numstack03 {
int[] array=new int[20];
int temp=0;
public void push(int i) {
array[temp]=i;
temp++;
}
public int pull(int i){
temp--;
return array[temp];
}
public boolean isEmpty(){
return temp == 0;
}
}
**************************************************************************
/** * 运算符堆栈 * @author SuXiaoXi */ public class Opstack03 { char[] array=new char[20]; int temp=0; /** * 压栈的方法 * @param c */ public void push(char c){ array[temp]=c; temp++; } /** * 弹栈的方法 * @param c * @return */ public char pull(char c){ temp--; return array[temp]=c; } public boolean isEmpty(){ return temp==0; } }