Java实现:利用栈进行后缀表达式计算实例

来源:互联网 发布:obs直播软件ipad 编辑:程序博客网 时间:2024/05/19 06:38
/*
 * 后缀表达式的实现
 */
import java.util.Scanner;
import java.util.Stack;


import javax.management.RuntimeErrorException;


public class OperateStack {


public static void main(String[] args) {


Scanner in = new Scanner(System.in);
// 设置存储数字的栈
Stack<String> stack = new Stack<>();
int sum = 0;
String readStrs = in.next();
char[] charArr = readStrs.toCharArray();
for (int i = 0; i < charArr.length; i++) {
String element = String.valueOf(charArr[i]);
if (isOperator(element)) {// 是操作符号*-+/,执行
if (stack.size() >= 2) {// 必须栈中元素大于2
System.out.println(stack.peek());
if (stack.peek().matches("[0-9]")) {
int num1 = Integer.parseInt(stack.pop());
int num2 = Integer.parseInt(stack.pop());
sum = whichOperator(element, num2, num1);
stack.push(String.valueOf(sum));
}else{//输入中不是数字和操作符报错
throw new RuntimeException("请输入数字和操作符");
}
} else {// 栈中小于2个元素报错
throw new RuntimeException("请输入正确的计算式子");
}
} else {// 不是操作符,是数字就压入栈中
stack.push(element);
}
}


System.out.println("结果是:" + sum);
in.close();
}
/**
* 判断是否为操作符
* @param operator
* @return
*/
public static boolean isOperator(String operator) {
String operatorList = "*+-/";
if (operatorList.contains(operator))
return true;
return false;
}
/**
* 判断是哪一个操作符,并做出运算
* @param operator
* @param num1
* @param num2
* @return
*/
public static int whichOperator(String operator, int num1, int num2) {
switch (operator) {
case "+":
return num1 + num2;
case "-":
return num1 - num2;
case "*":
return num1 * num2;
case "/":
return num1 / num2;
default:
return Integer.MAX_VALUE;
}
}


}
原创粉丝点击