这段Android计算器代码(扫描表达式)谁能给分析一下!急!

[复制链接]
查看11 | 回复0 | 2021-1-27 05:42:41 | 显示全部楼层 |阅读模式
importjava.util.LinkedList;
importjava.util.List;
publicclassGetValue{
publicStringbracke_dispose(Stringstring){
//处理括号里的表达式,思路,
//1.遇到正括号就将它在字符串里的索引保存在一个链表里
//2.遇到第一个反括号就处理这个括号里的表达式
//3.函数处理后返回一个可能还含有log,ln,sin,cos,tan等的但没有括号的表达式;
intflag=0,flag1=0,i=0;
intleng=string.length();
List[I]list=newLinkedList[I]();
Characterc;
Stringstr="",tmp="",tmp3="",tmp4="";
while(true){
if(i>=leng)
break;
c=string.charAt(i);
if('('==c)
list.add(0,i);
if(')'==c){
if(0==list.size()){
System.out.println(")error");
return"error";
}
str=string.substring(list.get(0)+1,i);
tmp=this.special_dispose(str);
tmp=this.alg_dispose(str);
if("error".equals(tmp))
return"error";
tmp3=string.substring(0,list.get(0));
tmp4=string.substring(i+1,leng);
string=tmp3+tmp+tmp4;
flag=str.length()+2;
flag1=tmp.length();
leng+=(flag1-flag);
i+=(flag1-flag);
list.remove(0);
}
i++;
}
if(list.size()!=0){
System.out.println("(error");
return"error";
}
returnstring;
}
publicStringspecial_dispose(Stringstring){
//用于处理特殊表达式;
if("error".equals(string)){
return"error";
}
string=dispose(string,"sin");
string=dispose(string,"cos");
string=dispose(string,"tan");
string=dispose(string,"log");
string=dispose(string,"ln");
string=dispose(string,"!");
string=dispose(string,"^");
string=dispose(string,"√");
string=dispose(string,"e");
returnstring;
}
publicStringalg_dispose(Stringstring){
//处理加减乘除
string=special_dispose(string);
if("error".equals(string)){
return"error";
}
Characterc;
Stringstr="";
Listlist=newLinkedList();
doubletmp=0;
booleanadd_flag=false;
for(inti=0;i=length)
tmp="error";
while(true){
if(j==length)
break;
character=string.charAt(j);
if(Character.isDigit(character)||(character=='.')){
tmp+=character;
}else
break;
j++;
}
if(0==tmp.length())
tmp="error";
System.out.println(tmp);
returntmp;
}
publicStringget_l_digit(Stringstring,intindex){
//得到index左边的第一个数;
Stringtmp="";
intj=index;
Characterc;
if(index
intindex,flag=dispose.length(),flag1,flag2;
StringtmpString="",tmpString1="",tmpString2="";
Doubletmp,tmp1;
while(string.length()!=0){
index=string.indexOf(dispose);
if(-1==index)
break;
if("!".equals(dispose)){
tmpString=get_l_digit(string,index-flag);
if(!"error".equals(tmpString)&&!"error".equals(tmpString1)){
tmp=newDouble(tmpString);
}else{
return"error";
}
tmp1=1.0;
for(inti=1;i -->
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行