package com.hcks.cmfds.util; import java.util.ArrayList; import java.util.List; public class Calculate { public static void main(String[] args) { String s="((66.0)*(744.0)-(175.0))/((66.0)*(744.0))"; s.replace(",", " "); Calculate c=new Calculate(s); Object o=c.DoCal(); System.out.print(o); } // ������ջ private List HList; // ��ֵջ public List Vlist; // �����Թ��� private CalUtility cu; // ������������� private OperFactory factory; public Calculate(String str) { str=str.replace("(-", "(0-"); HList=new ArrayList(); Vlist=new ArrayList(); cu=new CalUtility(str); factory=new OperFactory(); } //���� public Object DoCal() { String strTmp=cu.getItem(); while(true) { if(cu.isNum(strTmp)) { //�������ֵ����д�����ջ Vlist.add(strTmp); } else { //����� Cal(strTmp); } if(strTmp.equals("")) break; strTmp=cu.getItem(); } return Vlist.get(0); } //����� private void Cal(String str) { //��ű�Ϊ�գ����ҵ�ǰ���Ϊ""������Ϊ�Ѿ�������� if(str.equals("") && HList.size()==0 ) { return; } if(HList.size()>0) { if(HList.get(HList.size()-1).toString().equals("(") && str.equals(")")) { HList.remove(HList.size()-1); if(HList.size()>0) { str=HList.get(HList.size()-1).toString(); HList.remove(HList.size()-1); Cal(str); } return; } else if(cu.compare(HList.get(HList.size()-1).toString(),str) && !str.equals("(")) { //������ȣ������ IOper p=factory.CreateOper(HList.get(HList.size()-1).toString()); if(p!=null) { Vlist.set(Vlist.size()-2, p.oper(Vlist.get(Vlist.size()-2), Vlist.get(Vlist.size()-1))); HList.remove(HList.size()-1); Vlist.remove(Vlist.size()-1); Cal(str); } } else if(!str.equals("")) HList.add(str); } else { if(!str.equals("")) HList.add(str); } } }