想在这个四则混合运算的基础上加上函数运算(sin cos tan asin acos atan log)
谢谢。
public String value(String str){
Stack<Double> s = new Stack<Double>();
Double x,y;//定义x,y用于保存浮点数,定义i用于扫描后缀表达式
char[] c = str.toCharArray();
int i = 0;
//扫描后缀表达式中的每个字符,并进行相应处理
try{
while(i<c.length){
char t = ' ';
if(c[i]==' ') {//扫描到空格字符不做任何处理
i++;continue;
}
switch(c[i]){
case '+': //做栈顶的两个元素的加法,和赋值给x
x=s.pop()+s.pop();
i++;break;
case '-': //做栈顶的两个元素的减法,差赋值给x
x=s.pop();//弹出减数
x=s.pop()-x;//弹出被减数
i++;break;
case '*': //做栈顶的两个元素的乘法,积赋值给x
x=s.pop()*s.pop();
i++;break;
case '/': //做栈顶的两个元素的除法,商赋值给x
x=s.pop();//弹出除数
if(x!=0.0)//弹出被除数,并计算
x=s.pop()/x;
else {//除数为0时,输出"除数不能为0"
return "除数不能为0!";
}
i++;break;
case '^'://乘方运算
x=s.pop();
x=Math.pow(s.pop(),x);
i++;break;
case '%'://求余运算
x=s.pop();
x=s.pop()%x;
i++;break;
case 's'://正弦函数运算
x=s.pop();
x=Math.sin(s.pop());
i++;break;
case 'c':
x=s.pop();
x=Math.cos(s.pop());
i++;break;
case 't':
x=s.pop();
x=Math.tan(s.pop());
i++;break;
default://扫描到的是浮点数字符串,生成对应的浮点数
if(c[i]=='#'){
t = c[i];i++;
}
x=0.0;//利用x保存扫描到的整数部分的值
while(c[i]>=48 && c[i]<=57){
x=x*10+c[i]-48;i++;
}
if(c[i]=='.'){
i++;
y=0.0;//利用y保存扫描到的小数部分的值
Double j=10.0;
while(c[i]>=48 && c[i]<=57){
y = y+(c[i]-48)/j;
i++; j*=10;
}
x+=y;//把小数部分合并到整数部分输出
}
}
if(t=='#'){
x=-x;
}
s.push(x);//把扫描进行运算得到的浮点数压入栈中
} //end while
}catch(Exception e){
e.printStackTrace();
return "表达式有误,请重新输入!";
}
if (s.empty()) {
return "输入为空,请输入表达式!";
}
x = s.pop();
if(s.empty()){
return x.toString();
}
else{
return "表达式有误,请重新输入!";
}
} Java栈case语句
谢谢。
public String value(String str){
Stack<Double> s = new Stack<Double>();
Double x,y;//定义x,y用于保存浮点数,定义i用于扫描后缀表达式
char[] c = str.toCharArray();
int i = 0;
//扫描后缀表达式中的每个字符,并进行相应处理
try{
while(i<c.length){
char t = ' ';
if(c[i]==' ') {//扫描到空格字符不做任何处理
i++;continue;
}
switch(c[i]){
case '+': //做栈顶的两个元素的加法,和赋值给x
x=s.pop()+s.pop();
i++;break;
case '-': //做栈顶的两个元素的减法,差赋值给x
x=s.pop();//弹出减数
x=s.pop()-x;//弹出被减数
i++;break;
case '*': //做栈顶的两个元素的乘法,积赋值给x
x=s.pop()*s.pop();
i++;break;
case '/': //做栈顶的两个元素的除法,商赋值给x
x=s.pop();//弹出除数
if(x!=0.0)//弹出被除数,并计算
x=s.pop()/x;
else {//除数为0时,输出"除数不能为0"
return "除数不能为0!";
}
i++;break;
case '^'://乘方运算
x=s.pop();
x=Math.pow(s.pop(),x);
i++;break;
case '%'://求余运算
x=s.pop();
x=s.pop()%x;
i++;break;
case 's'://正弦函数运算
x=s.pop();
x=Math.sin(s.pop());
i++;break;
case 'c':
x=s.pop();
x=Math.cos(s.pop());
i++;break;
case 't':
x=s.pop();
x=Math.tan(s.pop());
i++;break;
default://扫描到的是浮点数字符串,生成对应的浮点数
if(c[i]=='#'){
t = c[i];i++;
}
x=0.0;//利用x保存扫描到的整数部分的值
while(c[i]>=48 && c[i]<=57){
x=x*10+c[i]-48;i++;
}
if(c[i]=='.'){
i++;
y=0.0;//利用y保存扫描到的小数部分的值
Double j=10.0;
while(c[i]>=48 && c[i]<=57){
y = y+(c[i]-48)/j;
i++; j*=10;
}
x+=y;//把小数部分合并到整数部分输出
}
}
if(t=='#'){
x=-x;
}
s.push(x);//把扫描进行运算得到的浮点数压入栈中
} //end while
}catch(Exception e){
e.printStackTrace();
return "表达式有误,请重新输入!";
}
if (s.empty()) {
return "输入为空,请输入表达式!";
}
x = s.pop();
if(s.empty()){
return x.toString();
}
else{
return "表达式有误,请重新输入!";
}
} Java栈case语句
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货