Java计算器核心算法代码实现
在进行一个表达式的计算时,先将表达式分割成数字和字符串然后利用出入栈将分割后的表达式进行中缀转后缀,再将后缀表达式进行计算得到结果(思想在上一篇写过)现在贴下Java语言的代码实现。(学习Java时间不长所以可能会有很多不足的地方,我会改进也欢迎大神可以给我一些意见和建议~谢谢啦)
我将这部分分成三个方法完成功能,并在getResult方法调用(getResult方法被主方法调用)
privateStringgetResult(Stringstr){
//分割
String[]Str=segment(str);
//中缀转后缀
StringnewStr=infToSuf(Str);
//后缀计算
Stringresult=sufToRes(newStr);
returnsufToRes(result);
}
1.字符串分割,为避免在TextView上显示带空格删除时不方便而且显示屏就那么大占地方,录入时的字符串中没有空格然后就手动分割了
privatestaticString[]segment(Stringstr){
String[]exp=newString[str.length()+1];
//找最近的索引并截取字符串
intl=str.length();
for(inti=0;i=0)
break;
}
intr=ind[t+1];
exp[i]=str.substring(0,r);
i++;
exp[i]=str.substring(r,r+1);
str=str.substring(r+1);
}elseif(((ind[1]-ind[4])==1)&&(ind[4]==0)){
Arrays.sort(ind);
intt;
for(t=0;t<6;t++){
if(ind[t]>=0)
break;
}
intr=ind[t+1];
exp[i]=str.substring(0,1);
i++;
exp[i]=str.substring(1,r+2);
i++;
exp[i]=str.substring(r+2,r+3);
str=str.substring(r+3);
}else{
Arrays.sort(ind);
intt;
for(t=0;t<6;t++){
if(ind[t]>=0)
break;
}
if(t==6)
break;
index=ind[t];
if(index!=0){
exp[i]=str.substring(0,index);
i++;
}
exp[i]=str.substring(index,index+1);
str=str.substring(index+1);
}
}
intj=0;
intk=0;
for(;exp[j]!=null;j++){}
if(!exp[j-1].equals(")")){
exp[j]=str;
str="";
k=j;
}else{
k=j-1;
}
String[]expp=newString[k+1];
for(intt=0;t
2.中缀转后缀
privatestaticStringinfToSuf(String[]exp){
StringnewStrs="";
//初始化栈
Stackstack=newStack<>();
/*
判断并放入后缀表达式中:
for循环遍历整个str进行判断
循环结束若栈不为空全部出栈
*/
intl=exp.length;
for(inti=0;i
3.后缀的计算
privatestaticStringsufToRes(StringsufStr){
String[]exp=sufStr.split("");
Stackstack=newStack<>();
StringRes="";
for(inti=0;i=0;m--){
if(Res.charAt(m)=='0'){
}else{
Res=Res.substring(0,m+1);
break;
}
}
if(Res.charAt(Res.length()-1)=='.'){
Res=Res.substring(0,Res.length()-1);
}
}
returnRes;
}
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。如果你想了解更多相关内容请查看下面相关链接