JFrame写混合运算器

核心处理代码:

//计算器类,JFrame省略

class Cacu{

  private int num;

  private String arr1;

       private double []number;

public  Cacu(){///先进行初始化

 num=1;

arr1="#";

number=new double[1];

number[0]=0;

}

  

 public void Push1(char c){

  arr1+=c;

 }

 

 public double Popn(){

 

 num--;

return number[num];

 }

 

 public void Pushn(double numb){

 

 double [] arrnum=new double[num+1];

int i;

for(i=0;i<num;i++)

arrnum[i]=number[i];

  arrnum[i]=numb;

  number=arrnum;

   num++;

 }

 

 

 public int rs(char c){

 int num;

 switch(c){

  case '+':

       num=1;

       break;

       

   case '-':

   num=1;

   break;

   

 case '*':

     num=2;

     break;

      

 case '÷':

  num=2;

  break;

  

 default:

 num=0;

 break;

 }

 return num;

 }

 

 

   public int comp(char a,char b){

  if(rs(a)>rs(b))

  return 1;

        else 

  return -1;

   }

 

 public char getTop(){

return arr1.charAt(arr1.length()-1);

 }

   

   public String center(Stringstr){

 

     String numc="";

        str+='#';

   char c;

   

 for(int i=0;i<str.length();i++){

  c=str.charAt(i);

 if(c=='+'||c=='-'||c=='*'||c=='÷'||c=='#'){

  Pushn(Integer.parseInt(numc));

   numc="";

         

switch(comp(c,getTop())){

 case 1:

Push1(c);

 break;

    

  case -1:

    char cac=getTop();

  double num1=Popn();

  double num2=Popn();

  System.out.println(""+getTop()+num2+getTop()+num1);

  deposit(cac,num1,num2);

      if(c!='#')

       arr1+=c;

}

 }

 

 else{

 numc+=c;

 

 }

 

 }

 

 

 while(comp(getTop(),'#')==1){

    char cacc=getTop();

  double num1=Popn();

  double num2=Popn();

  System.out.println(""+getTop()+num1+getTop()+num2);

  deposit(cacc,num1,num2);

   }

 

 double fd=number[number.length-1];

 int nums=(int)fd;

 if(nums==fd)

 return ""+nums;

 else

   return String.format("%.3f",fd);

   }

 

 public void deposit(char c,double num1,double num2){

 

 switch(c){

 case '+':

   Pushn(num2+num1);

   //System.out.println("++"+num2+num1);

   break;

 case '-':

Pushn(num2-num1);

break;

 case '*':

Pushn(num2*num1);

break;

 case '÷':

   Pushn(num2/num1);

 break;

 }

    arr1=arr1.substring(0,arr1.length()-1);

 } 

}

  //运用动态栈的后进先出来实现,

动态栈arr1,预置arr1[0]='#'  ,和number[0]=0  

通过比较优先级,优先级大的,存入栈arr1,反之则进行s四则运算,

最后再处理未完成的数





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值