您的位置:首页 > 编程语言 > Java开发

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

2017-09-14 13:04 363 查看
/*

 * 后缀表达式的实现

 */

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;
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 后缀表达式