package greendrm.simple.calculator;
import java.util.LinkedList;
public class HelloSimpleCalculator {
private final static String EQ = "2+3*4-30/2";
private final static String OP = "*/+-";
/**
* @param args
*/
public static void main(String[] args) {
Calculate calculate = new Calculate();
LinkedList<String>stackNumber = new LinkedList<String>();
LinkedList<String>stackOperator = new LinkedList<String>();
char[] tmp;;
int off = 0, len = 0;
boolean bCal = false;
tmp = EQ.toCharArray();
for (int i = 0; i < EQ.length(); i++) {
boolean bEnd = false;
if (i == (EQ.length() - 1)) {
bEnd = true;
len++;
}
for (int j = 0; j < OP.length(); j++) {
if (EQ.charAt(i) == OP.charAt(j) || bEnd) {
stackNumber.addLast(String.valueOf(tmp, off, len));
if (bCal) {
String res = null;
String op = stackOperator.removeLast();
if (op.equals("*")) {
res = calculate.Mul(stackNumber.removeLast(), stackNumber.removeLast());
}
else if (op.equals("/")) {
res = calculate.Div(stackNumber.removeLast(), stackNumber.removeLast());
}
if (res != null)
stackNumber.addLast(res);
bCal = false;
}
if (bEnd == false) {
stackOperator.addLast(String.valueOf(OP.charAt(j)));
off = i+1;
len = -1;
if (OP.charAt(j)== '*' || OP.charAt(j) == '/') {
bCal = true;
}
}
break;
}
}
len++;
}
while(stackOperator.size() > 0) {
String op = stackOperator.removeLast();
String res = null;
if (op.equals("+")) {
res = calculate.Add(stackNumber.removeLast(), stackNumber.removeLast());
}
else if (op.equals("-")) {
res = calculate.Sub(stackNumber.removeLast(), stackNumber.removeLast());
}
if (res != null)
stackNumber.addLast(res);
}
System.out.println(EQ + " = " + stackNumber.removeLast());
}
}