java 计算器完整版,代码!

package cal;


import java.util.Vector;


public class lmail 
{
public static Vector<String> vsg=new Vector<String>();
public static Vector<String> nums=new Vector<String>();
public static Vector<String> chas=new Vector<String>();

public static int num=0;


  static int find2(char a)//zhannei
  {
  if(a=='=')return -2;
  else if(a==')')return -1;
  else if(a=='(')return 4;
  else if(a=='+')return 1;
  else if(a=='-')return 1;
  else if(a=='*')return 2;
  else if(a=='/')return 2;
  return 0;
  }
  static int find(char a)//zhannei
  {
  if(a=='=')return -2;
  else if(a==')')return -1;
  else if(a=='(')return 0;
  else if(a=='+')return 1;
  else if(a=='-')return 1;
  else if(a=='*')return 2;
  else if(a=='/')return 2;
  return 0;
  }


  public static boolean isN(String t)
  {   //System.out.println(t);
 if(t.equals("+")||t.equals("-")||t.equals("*")||t.equals("/")||t.equals("(")||t.equals(")")||t.equals("="))
 return false;
 return true;
  }

  static double oper(String s1,String s2,String op)
  {
// System.out.println(">>>>"+s1+s2+op);
 if(op.equals("+"))return Double.valueOf(s1)+Double.valueOf(s2);
 if(op.equals("-"))return Double.valueOf(s1)-Double.valueOf(s2);
 if(op.equals("*"))return Double.valueOf(s1)*Double.valueOf(s2);
 if(op.equals("/"))return Double.valueOf(s1)/Double.valueOf(s2);
 return 0;
  }
  //public static boolean(char c,char c2)
  {
//  if(c=='-'&&c2=='-')
  }
public static void main(String[] args)
{
String name="4/2-2-3*(5-3+2*6)/(-8/2/2)=";


//String[] aa = name.split("+|-|=|*|/|(|)");
int i,j,k;
//char d = 0;
StringBuffer d = null ;
String chg="";
for(i=0;i<name.length();i++)
{
char index=name.charAt(i);
if(index=='1'||index=='2'||index=='3'||index=='4'||index=='5'||index=='6'
||index=='7'||index=='8'||index=='9'||index=='0'||index=='.')
{
chg+=index;
}
else 
{   char n=0;
if(i>0)   n=name.charAt(i-1);
if(i>1&&index=='-'&&(n=='-'||n=='+'||n=='*'||n=='/'||n=='('))
{  
chg+=index;
}
else if(i==0&&index=='-')
{
chg+=index;
}
else
{
if(chg.length()>0)
vsg.add(chg);
chg="";
vsg.add(""+index);
}
}
}
System.out.println(vsg);


chas.add("=");
num++;
int id=0;
while(id<vsg.size())
{   
//System.out.println(id+" "+vsg.get(id));
if(isN(vsg.get(id)))
{
nums.add(vsg.get(id));
}else
{  
while(chas.size()>0&&( //cmpare(chas.lastElement().charAt(0),vsg.get(id).charAt(0))
find(chas.lastElement().charAt(0))>=find2(vsg.get(id).charAt(0))   
))    // 4
{     // System.out.println("@@@@"+chas.lastElement()+"@@"+vsg.get(id).charAt(0));
//StringBuffer d2=new StringBuffer(chas.lastElement());  
String c0=chas.lastElement();
if(chas.lastElement().charAt(0)=='='&&vsg.get(id).charAt(0)=='=')
break;
if(!c0.equals("("))
{
int ny= nums.size();
//System.out.println(nums);
double d1=oper(nums.elementAt(ny-2),nums.elementAt(ny-1),chas.lastElement());
//nums.add(""+chas.lastElement().charAt(0));
nums.removeElementAt(ny-1);
nums.removeElementAt(ny-2);
nums.add(String.valueOf(d1));

//num++;
}
chas.removeElementAt(chas.size()-1);;
//System.out.println(nums+"<<>><"+chas);
//num--;
if(( vsg.get(id).equals(")") ) && ( c0.charAt(0)=='(' ))
break;
}


if(!vsg.get(id).equals("=")&&!vsg.get(id).equals(")"))
{ chas.add(vsg.get(id));   
}
   }
//System.out.println(nums+"|||||| "+chas);
id++;
}
System.out.println(nums.elementAt(0));
}


}

放在eclipse下运行即可


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值