文章目录
- 表达式运算实现:
-
- 1.栈实现
- 2.中缀表达式转后缀表达式计算
表达式运算实现:
1.栈实现
public class ExpressCalc {
public static void main(String[] args) {
/*
使用栈实现一个0-9整数带括号的表达式计算
处理步骤:
1.创建两个栈,一个符号栈(左括号、右括号、加、减、乘、除),左括号优先级最高,右括号优先级最低,一个数字栈(0-9)
2.遇到数字:直接入数字栈
3.遇到符号:
如果符号栈为空,则直接入符号栈
如果当前符号优先级 > 栈顶符号优先级:直接入符号栈
如果当前符号优先级 栈顶符号优先级为止
*/
String[] expressArray = {
"2+3*(1+2*4)-3*5",
"2+3",
"2+3+(3*4/2)-1",
"2+3+(3*4/2+5)-1",
"2+3+(3*4/2+5-9)-1",
"2+3+(3*4/2+5-9)-1+2*(1+2)",
服务器托管网 "2",
};
for (String expressStr : expressArray) {
int num = calcExpress(expressStr);
System.out.println(expressStr + "=" + num);
}
}
private static int calcExpress(String expressStr) {
StackInteger> numSt = new Stack>();
StackCharacter> symbolSt = new Stack>();
char[] cs = expressStr.toCharArray();
for (int i = 0; i cs.length; i++) {
// 匹配数字
if(String.valueOf(cs[i]).matches("d")){
numSt.add(cs[i] - '0');
}else if(cs[i] == '+' || cs[i] == '-' || cs[i] == '*' || cs[i] == '/' || cs[i] == '(' || cs[i] == ')'){
if(symbolSt.isEmpty() || priority(cs[i], symbolSt.peek())){
symbolSt.add(cs[i]);
}else{
while(!symbolSt.isEmpty() && symbolSt.peek() != '(' && !priority(cs[i], symbolSt.peek())){
Integer n1 = numSt.pop();
Integer n2 = numSt.pop();
服务器托管网 int res = calc(n2, n1, symbolSt.pop());
numSt.add(res);
}
if(!symbolSt.isEmpty() && symbolSt.peek() == '(') symbolSt.pop();
if(cs[i] != ')') symbolSt.add(cs[i]);
}
}
}
while(!symbolSt.isEmpty()){
Integer n1 = numSt.pop();
Integer n2 = numSt.pop();
int res = calc(n2, n1, symbolSt.pop());
numSt.add(res);
}
return numSt.pop();
}
// 优先级判断 a > b : 返回true,否则返回false
public static boolean priority(char a, char b){
if(a == '(') return true;
if((a == '*' || a == '/') && (b == '+' || b == '-' || b == ')')) return true;
if((a == '+' || a == '-') && b == ')') return true;
return false;
}
public static int calc(int a, int b, char express){
switch (express){
case '+':
return a + b;
case '-':
return a - b;
case '*':
return a * b;
case '/':
return a / b;
default:
throw new RuntimeException("不支持" + express + "进行运算");
}
}
}
2.中缀表达式转后缀表达式计算
https://blog.csdn.net/Linging_24/article/details/104481492
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
简介 kill 命令用于发送信号到进程。信号是操作系统用来通知进程特定事件的一种机制。 kill 命令的基本用法是: kill [信号] [进程ID] 或者,您可以使用进程名称来代替进程ID: kill [信号] [进程名称] 这里的 [信号] 是一个可选参数…