/**
* @Author: 小猿搬砖
* @CreateTime: 2022/3/8 16:35
* @Description: 给你一个字符串s,请你实现一个基本的计算器来计算并返回它的值。(整数除法仅保留整数部分)
* 示例1:
* 输入:s = " 3+2 * 2 "
* 输出:7
* 示例2:
* 输入:s = " 3 / 2 "
* 输出:1
* 示例3:
* 输入:s = " 3+5 / 2 "
* 输出:5
*
* 分析:当遇到加法或者减法时不确定是否要计算,当遇到乘法或除法时可以直接计算它们的值(运算优先级高)
*/
public class CalculateExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你需要计算的字符串,如:1+2-3/4*5,请输入:");
String s = scanner.next();
calculate(s);
}
private static int calculate(String s){
/**
* 记录每个数字前面的符号,如果是加法或者减法直接放到栈中
* 如果是乘法或者除法就直接和前面的数字运算
*/
int flag = '+';
Stack<Integer> stack = new Stack<>();
int n = s.length();
for (int i = 0; i < n; i++) {
int str = s.charAt(i);
//过滤掉空格
if (str == ' '){
continue;
}
if (str >= '0' && str <= '9'){
//找到连续的数字字符串,将它化为整数
int num = 0;
while (i < n && (s.charAt(i) >= '0' && s.charAt(i) <=('9'))) {
num = num * 10 + str - '0';
i++;
}
i--;
if (flag == '*'){
stack.push(num * stack.pop());
} else if (flag == '/') {
stack.push(num / stack.pop());
} else if (flag == '+') {
stack.push(num);
} else if (flag == '-') {
stack.push(num);
}
} else {
//记录前一个的符号
flag = str;
}
}
//记录栈中所有元素的综合
int res = 0;
while (!stack.isEmpty()) {
res += stack.pop();
}
System.out.println("栈中字符串中所有的和为:" + res);
return res;
}
}
使用栈解基本计算器 II
最新推荐文章于 2024-09-13 21:40:38 发布
该博客介绍了一个简单的Java程序,用于实现基本的计算器功能。程序通过扫描输入的字符串表达式,利用栈来处理加减乘除运算,遵循运算符的优先级。示例包括了加、减、乘、除的计算,并在最后输出结果。程序处理了数字和运算符的组合,能正确计算整数除法的结果。
摘要由CSDN通过智能技术生成