📄 biaoda.java
字号:
//算符优先发表达式求值
import java.util.*;
import java.io.*;
class biaodashi
{
String expression;
Stack stack_num;//数字栈
Stack stack_sig;//字符栈
char sig[]={'+','-','*','/','(',')','='};//元算符
char rel[][]={ {'>','>','<','<','<','>','>'},//运算符的优先关系
{'>','>','<','<','<','>','>'},
{'>','>','>','>','<','>','>'},
{'>','>','>','>','<','>','>'},
{'<','<','<','<','<','=',' '},
{'>','>','>','>',' ','>','>'},
{'<','<','<','<','<',' ','='} };
char Precede(char c,char d)//判断运算符c和d的优先关系
{
int i,j;
for(i=0;c!=sig[i];i++);
for(j=0;d!=sig[j];j++);
return (rel[i][j]);
}
double Operate(double x,char c,double y)//计算表达式xcy的结果
{
double result = 0;
switch(c)
{
case'+':result=x+y;break;
case'-':result=x-y;break;
case'*':result=x*y;break;
case'/':result=x/y;break;
}
return result;
}
public biaodashi()
{
String expression=""; //得到字符串
try {
expression = (new BufferedReader(new InputStreamReader(System.in))).readLine();
}
catch (IOException e)
{
e.printStackTrace();
}
this.expression = expression;
StringTokenizer str = new StringTokenizer(expression,"+-*/()=",true);// 将表达式分割成数学式子
stack_num = new Stack();//栈的构造
stack_sig = new Stack();
stack_sig.push("=");
String text;
text = str.nextToken();
while(!text.equals("=")||!((String)(stack_sig.peek())).equals("="))
{
if(Character.isDigit(text.charAt(0)))//当前元素为数字
{
stack_num.push(text);//!!!注意:数字在栈中以字符串的形式保存,计算时需转换
text = str.nextToken();
}
else
{
switch(Precede(((String)stack_sig.peek()).charAt(0),text.charAt(0)))//判断当前字符和字符栈顶字符的优先关系
{
case'<':stack_sig.push(text);text = str.nextToken();break;
case'=':stack_sig.pop();text = str.nextToken();break;
case'>':char theta = ((String)(stack_sig.pop())).charAt(0);//从符号栈中弹出一个符号
double x = Double.parseDouble((String)stack_num.pop());//从数字栈中弹出两个操作数
double y = Double.parseDouble((String)stack_num.pop());
stack_num.push(String.valueOf(Operate(y,theta,x)));//将计算所的数字转换为字符串的形式压入栈
break;
}
}
}
System.out.print(stack_num.peek());
}
}
public class Biaoda
{
public static void main(String [] args)
{
System.out.println("Please input your CULETER!");
biaodashi a = new biaodashi();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -