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;
}
}
}
* 后缀表达式的实现
*/
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实现利用广度优先遍历(BFS)计算最短路径的方法
- Java学习之路——利用JDOM对xml文档进行解析等操作实例
- 用java实现计算String类型的四则运算——用栈和后缀表达式实现
- java netty socket库和自定义C#socket库利用protobuf进行通信完整实例
- JavaEE中利用JAXB来实现Java对象和XML文档进行相互转换
- 利用java在服务器和客服端建立连接,进行通讯(代码实例)
- 实现对数据进行分组小计并计算合计的实例 asp.net
- JAVA利用HttpClient进行POST请求(HTTPS)实例
- java利用Socket实现聊天室功能实例
- 利用朴素贝叶斯算法进行分类-Java代码实现
- 利用Java实现简单的词法分析器实例代码
- JAVA 利用Arraylist.sort()进行排序的实现。(comparable接口的实现)
- 利用commons-math-1.1进行java数值计算
- java实现spark streaming与kafka集成进行流式计算
- SPCAMLEditor使用系列(3)--利用SPCamlEditor实现 时间字段跟当前时间进行实时比较计算
- Java利用cors实现跨域请求实例
- 如何利用java实现浮点数的精确计算
- JAVA实现中缀表达式转换为后缀表达式并计算
- 利用广度优先遍历(BFS)计算最短路径 - Java实现
- Java实现堆的封装,进行插入,调整,删除堆顶以完成堆排序实例