核心处理代码:
//计算器类,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四则运算,
最后再处理未完成的数