java栈实现简易计算器算法
问题描述:
对于任意字符串,包含+ - * /和括号, 求出该表达式的值
首先百度该问题,网上有不少答案,但是实际思考,发现,很多答案没有考虑完全,例如:
-1+(-2)*3 遇到负号怎么办?
现贴出代码如下:
1 package calcultor; 2 3 import java.util.Stack; 4 5 public class Calcultor { 6 7 static boolean isNumber(char x) { 8 if (x >= '0' && x <= '9') { 9 return true; 10 } 11 return false; 12 } 13 14 static int priority(char x) { 15 if (x == '+' || x == '-') { 16 return 0; 17 } else if (x == '*' || x == '/') { 18 return 1; 19 } else if (x == '(' || x == ')') { 20 return -1; 21 } else if (x == '#') { 22 return -2; 23 } 24 25 return -3; 26 } 27 28 public static int calculte(String s) { 29 Stack<Integer> number = new Stack<Integer>(); 30 Stack<Character> operate = new Stack<Character>(); 31 char top; 32 int a = 0, b = 0; 33 int j = 0; 34 boolean flag = false; 35 for (int i = 0; i < s.length(); ++i) { 36 if (s.charAt(1) == '-') { 37 flag = true; 38 } 39 if (i >= 2 && i <= s.length() - 2) { 40 j = i; 41 if (!isNumber(s.charAt(j - 1)) && s.charAt(i) == '-' && isNumber(s.charAt(j + 1))) { 42 flag = true; 43 } 44 } 45 if (isNumber(s.charAt(i))) { 46 int Temp = 0; 47 String temp = ""; 48 temp += s.charAt(i); 49 while (isNumber(s.charAt(++i))) 50 temp += s.charAt(i); 51 for (int jj = 0; jj < temp.length(); ++jj) { 52 Temp = Temp * 10 + temp.charAt(jj) - 48; 53 } 54 if (flag) { 55 Temp *= -1; 56 flag = !flag; 57 } 58 number.push(Temp); 59 temp = null; 60 } 61 if (!isNumber(s.charAt(i))) { 62 if (((s.charAt(i) == '-') && !flag) || (s.charAt(i) != '-')) { 63 if (operate.empty()) { 64 operate.push(s.charAt(i)); 65 } else { 66 top = operate.peek(); 67 if (priority(s.charAt(i)) > priority(top) || s.charAt(i) == '(') { 68 operate.push(s.charAt(i)); 69 } else { 70 while (priority(s.charAt(i)) <= priority(top)) { 71 if (top == '#' && s.charAt(i) == '#') { 72 int answer; 73 operate.pop(); 74 answer = number.peek(); 75 number.pop(); 76 return answer; 77 } else if (top == '(' && s.charAt(i) == ')') { 78 ++i; 79 } else { 80 a = number.peek(); 81 number.pop(); 82 b = number.peek(); 83 number.pop(); 84 } 85 if (top == '+') { 86 b += a; 87 number.push(b); 88 } else if (top == '-') { 89 b -= a; 90 number.push(b); 91 } else if (top == '*') { 92 b *= a; 93 number.push(b); 94 } else if (top == '/') { 95 b /= a; 96 number.push(b); 97 } 98 operate.pop(); 99 top = operate.peek(); 100 } 101 operate.push(s.charAt(i)); 102 } 103 } 104 } 105 } 106 } 107 108 return 0; 109 } 110 111 public static void main(String[] args) { 112 String s = new String("#(1+2)+6/3+(-2*2)+(-2*6)#"); 113 int answer = calculte(s); 114 System.out.println("the answer is " + answer); 115 } 116 }
转载于:https://www.cnblogs.com/lifeng-blog/p/7407043.html
java栈实现简易计算器算法相关推荐
- 数据结构:栈实现简易计算器
文章目录 栈实现简易计算器 思路 代码实现 栈结构 运算方法 测试 栈实现简易计算器 之前的博客已经介绍了栈数据结构,栈有着数据先进后出的特点,因此用于实现简易计算器时相当方便.本博文中将介绍如何用栈 ...
- (C语言)栈应用简易计算器实现
//利用栈实现简易计算器,进行包含+,-,*,/,(,)间的计算 #include<stdio.h> #include<string.h> #define MaxSize 10 ...
- java awt 简单计算器,JAVA Swing 开发简易计算器(上)
开发一个简易的计算器我们主要分为两大部分:图形界面设计与具体功能实现.这篇文章讲图形界面设计,下篇讲具体功能实现. 代码下载:https://github.com/taifus/Java_Calcul ...
- Java编写的简易计算器
一般来说,刚开始学习Java比较适合做一些小的东西,比如计算器.图书管理系统什么的,这样会学的稍微快一些.而我这个计算器正适合新手参考,为什么?因为我也是新手.虽说代码比较烂,但是很- 我先说下大致思 ...
- JAVA制作的简易计算器——傻瓜计算器
用JAVA编写的傻瓜计算器 作用: 1.可以实现加法.减法.乘法.除法简单运算且是单一运算,不可混合使用. 2.CE为清除键 3.没有小数点O(∩_∩)O 思路: 创建JFrame窗口,设置标题,创建 ...
- 简易计算器 java_用Java做一个简易计算器,要用到哪些知识?
分析问题关键词:Java.计算器 深夜无聊,暂且一答. 计算器分两个步骤:计算 + 器 篇一 ·「器」 在编程中,我们可以把「器」理解为「GUI(图形界面)」,Java 语言描绘的图形界面有很多种类, ...
- java简易计算器考察什么_练习:用java写一个简易计算器
初学java中的选择,判断,循环和方法的概念,写一个简易的两位数计算器 思路推荐: 写4个方法:加减乘除 利用循环+switch进行用户交互 传递需要操作的两个数 输出结果 package com.j ...
- evaluate函数使用无效_[Python实战]使用栈实现简易计算器
我们这次实现的命令行计算器,支持加减乘除.括号.浮点数.负数,以及查看历史和退出功能. 主要的思路:read - parse - print - loop. read 阶段是指读取用户在提示符(cal ...
- java编写计算器实现cancel_用Java编写的简易计算器
在写代码的过程中,我意识到对于学习编程语言来说,比之看书,动手实践是更重要的. 通过写这个计算器程序,我掌握了一个java程序的基本构架,学会了用构造器进行初始化,使用监听器,设计界面等等知识. 这个 ...
最新文章
- 用计算机怎么算个人所得税,个税计算器2021
- 皮一皮:谁还不是个孩子...
- 七牛上传文件小工具v0.1
- richtextbox自动滚动到最下面_软网app:滚动截图将超长网页“一网打尽”
- C语言 | 指向指针的指针排序
- mybatis学习(25):分页3 多参数传递(使用map)
- @staticmethod和@classmethod的作用与区别
- 2020年,我靠Java加薪3倍工资,只因做对这件事
- Flutter 高级篇-所有知识点架构
- 西门子step7安装注册表删除_如何完全删除step 7
- uniapp scroll-view组件横向滚动不生效
- [散文]茶想(作者:王莹莹)
- 一个骗人的恶劣网站: GPS 定位好友 的传说 ( 其中一个域名是 ipl38.com 诈骗:利用手机号码GPS卫星追踪你的他(她)在什么位置
- 增益和偏移的概念_2 理解与校准 ADC 系统的偏移和增益误差
- 基于CORBA规范的中间件——CORBA基本原理
- 两位数求和(xhh)
- Kubernetes----Job控制器
- 树莓派mqtt连接onenet平台实现消息订阅与发布
- 大数据分析案例-基于决策树算法构建世界杯比赛预测模型
- 埃克塞特大学招收医学图像博士生