我是靠谱客的博主 尊敬信封,这篇文章主要介绍Java实现简单的思维运算(只有加减乘除),现在分享给大家,希望可以做个参考。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package cn.zhouyu.test; import java.util.Stack; public class EvaluateExpression { public static void main(String[] args) { String expression = "(1+2)*4-3"; //1.1、创建一个存储操作数的栈 Stack<Integer> operandStack = new Stack<>(); //1.2、创建一个存储操作符和括号的栈 Stack<Character> operatorStack = new Stack<>(); //1.3、在expression的每个字符旁边插入空格,方便下面分割 expression = insertBlanks(expression); //1.4、分割expression,得到单个的操纵数、操作符和括号 String[] tokens = expression.split(" "); for(String token : tokens) { //把分割后剩下的空格去掉 if(token.length() == 0) { continue; } //2.1、如果是+或-操作符,处理在operatorStack栈顶的所有操作符。 else if(token.charAt(0) == '+' || token.charAt(0) == '-') { while(!operatorStack.isEmpty() && (operatorStack.peek()== '+'|| operatorStack.peek()== '-'|| operatorStack.peek()== '*'|| operatorStack.peek()== '/')){ //计算operandStack中的两个数的加减乘除 processAnOperator(operandStack, operatorStack); } operatorStack.push(token.charAt(0)); } //2.2、如果是*或/操作符,处理在operatorStack栈顶的所有*和/操作符 else if(token.charAt(0) == '*' || token.charAt(0) == '/') { while(!operatorStack.isEmpty()&& (operatorStack.peek()== '*'|| operatorStack.peek()== '/')) { processAnOperator(operandStack, operatorStack); } operatorStack.push(token.charAt(0)); } //2.3、如果是(,压入operatorStack else if(token.charAt(0) == '(') { operatorStack.push('('); } //2.4、如果是),重复处理来自operatorStack栈顶的操作符,直到看到栈上的(符号。 else if(token.charAt(0) == ')') { while(operatorStack.peek()!='(') { processAnOperator(operandStack,operatorStack); } operatorStack.pop(); } else { operandStack.push(new Integer(token)); } } //清除栈:重复处理来自operatorStack栈顶的操作符,直到operatorStack为空为主 while(!operatorStack.isEmpty()) { processAnOperator(operandStack,operatorStack); } System.out.println(operandStack.pop()); } private static String insertBlanks(String expression) { String result = ""; for(int i=0;i<expression.length();i++) { if(expression.charAt(i) == '(' || expression.charAt(i) == ')' || expression.charAt(i) == '+' || expression.charAt(i) == '-' || expression.charAt(i) == '*' || expression.charAt(i) == '/' ) { result += " " + expression.charAt(i) + " "; }else{ result += expression.charAt(i); } } return result; } public static void processAnOperator(Stack<Integer> operandStack,Stack<Character> operatorStack) { char op = operatorStack.pop(); int op1 = operandStack.pop(); int op2 = operandStack.pop(); //这里注意,别写成op1/op2。在expression中应该是op2/op1,因为op2先入栈 if(op == '+') { operandStack.push(op2+op1); } else if(op == '-') { operandStack.push(op2-op1); } else if(op == '*') { operandStack.push(op2*op1); } else if(op == '/') { operandStack.push(op2/op1); } } }

最后

以上就是尊敬信封最近收集整理的关于Java实现简单的思维运算(只有加减乘除)的全部内容,更多相关Java实现简单内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(83)

评论列表共有 0 条评论

立即
投稿
返回
顶部