基于java的简易计算器实现
方法:
1.将string类型的表达式输入转换成后缀表达式
2.计算后缀表达式
步骤一:将string类型的表达式输入转换成后缀表达式
输入字符串表达式,并将表达式转换成char型数组
String a = "(5+5)*2-(4-2)/2";
char [] x = a.toCharArray();
Stack<Character> b = new Stack<>();
String back = "";//后缀表达式
后缀表达式实现
1. 遇到”(“时进栈
2. 遇到数字,将数字加入back字符串后面
3. 遇到”+“、”-“、”*“、”/“时,判断栈顶元素的优先级是否高于或等于该元素,如果是则依次出栈加入back直到栈顶元素优先级小于该元素,该元素进栈
4. 遇到”)“时,栈顶元素依次出栈直到栈顶为”(“,删除栈顶”(“元素
for (int i = 0; i <x.length; i++) {
//System.out.println(back);
if(x[i] == '(') b.push(x[i]);
if(x[i] == '+' || x[i] == '-') {
while(!b.isEmpty() && (b.peek() == '*' || b.peek() == '/')) {
back = back + b.peek();
b.pop();
}
b.push(x[i]);
}
if(x[i] == '*' || x[i] == '/') {
while(!b.isEmpty() && (b.peek() == '*' || b.peek() == '/')) {
back = back + b.peek();
b.pop();
}
b.push(x[i]);
}
if(x[i] == ')') {
while (!b.isEmpty()){
if(b.peek() == '(') {b.pop(); break;}
//System.out.println(back);
back = back + b.peek();
b.pop();
}
}
if(x[i] >= '0' && x[i] <= '9') back = back + x[i];
}
while(!b.isEmpty()){
back += b.peek();
b.pop();
}
System.out.println(back);
步骤二:计算后缀表达式
1. 遇到数字则进栈
2. 遇到运算符时,取出栈顶两个元素进行计算
3. 直到栈为空
Stack<Double> bb = new Stack<>();
double p,q;
char [] xx = back.toCharArray();
for (int i = 0; i < xx.length; i++) {
if(xx[i] >= '0' && xx[i] <= '9') {
double s = (double) xx[i] - 48;
//System.out.println(s);
bb.push(s);
//System.out.println(xx[i] - 48);
}
if(xx[i] == '+'){
p = bb.peek();
bb.pop();
q = bb.peek();
bb.pop();
double result = p+q;
bb.push(result);
//System.out.println(result);
}
if(xx[i] == '-'){
p = bb.peek();
bb.pop();
q = bb.peek();
bb.pop();
double result = q-p;
bb.push(result);
//System.out.println(result);
}
if(xx[i] == '*'){
p = bb.peek();
bb.pop();
q = bb.peek();
bb.pop();
double result = p*q;
bb.push(result);
//System.out.println(result);
}
if(xx[i] == '/'){
p = bb.peek();
bb.pop();
q = bb.peek();
bb.pop();
double result = q/p;
bb.push(result);
//System.out.println(result);
}
}
int aaa = bb.peek().intValue();
System.out.println(aaa);
优势与局限
1. 该方法解决了优先级高无括号的问题
2. 该方法解决了除法生成小数的问题
3. 该方法仅限于0-9的简单计算
4. 该方法输入仅限于整数
声明:在十位数或以上的简单计算或是小数的简单计算上,如有好的方法告知
基于java的简易计算器实现的更多相关文章
- 基于Java的简易表达式解析工具(一)
最近需要用到相关表达式解析的工具,然后去网上搜索,找到了一个用C#写的表达式解析工具,仔细看了功能后发现,这正是我需要的,如果我能将它改造成基于Java语言的方式,岂不是更好吗,所以花了一段时间,把网 ...
- 基于Java的简易表达式解析工具(二)
之前简单的介绍了这个基于Java表达式解析工具,现在把代码分享给大家,希望帮助到有需要的人们,这个分享代码中依赖了一些其他的类,这些类大家可以根据自己的情况进行导入,无非就是写字符串处理工具类,日期处 ...
- 基于Andriod的简易计算器
这学期有安卓这门课,这里做了一个简易的计算器,实现了两位数加减乘除的基本功能,比较简单适合用来入门学习. 运行效果 预备知识 实现这个计算器之前要先了解实现计算器需要的基本组件 1.TextView ...
- Java实现简易计算器
import java.util.Scanner; public class Demo_1 { public static void main(String[] args) { //输入的两个数字进行 ...
- java基础——简易计算器的实现
计算器: import java.util.Scanner;public class CalculateDemo { public static void main(String[] args ...
- java开发简易计算器
所选用的编译工具为NetBeans /* * To change this license header, choose License Headers in Project Properties. ...
- 基于c的简易计算器二
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <ctype.h> ...
- 基于c的简易计算器一
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <malloc.h&g ...
- 如何使用Java AWT 创建一个简易计算器
摘要:手把手教你使用 Java AWT 创建一个简易计算器. 本文分享自华为云社区<手把手教你使用 Java AWT 创建一个简易计算器>,作者:海拥 . 关于AWT AWT (抽象窗口工 ...
随机推荐
- sqlserver2008数据库文件降级为sqlserver2005文件
直接分离附加是不行的. 操作步骤如下: 在sqlserver2008企业管理器中 右键xx数据库->任务->生成脚本 弹出框中勾选 为所选数据库中的所有对象编写脚本 下一步 修改如下图片 ...
- ios的白屏坑
请参考http://www.fly63.com/article/detial/287
- WPF中使用定时器 DispatcherTimer 做TCP连接中的心跳 HeartBeat
开发过程中经常遇到定时触发的需求,如:TCP/IP连接中,使用心跳包保持连接或检测连接是否已经中断. WPF中有多种定时器: 1.using System.Windows.Threading; 代码如 ...
- 任务十:Flexbox 布局练习
任务目的 学习如何flex进行布局,学习如何根据屏幕宽度调整布局策略. 任务描述 需要实现的效果如效果图(点击打开)所示,调整浏览器宽度查看响应式效果,红色的文字是说明,不需要写在 HTML 中. 任 ...
- metasploit 连接database相关问题
我们首先去这个目录下看database.yml文件内容: 下图是我们看到的的信息 接着打开metasploit,运行db_connect 指令链接数据库.格式为: db_connect 用户名:密码@ ...
- Linux Firefox Adobe Flash Player 安装和更新
1.下载 Firefox Adobe Flash Player 使用Linux上的火狐浏览器访问如下的下载网址: https://get.adobe.com/flashplayer/ 选择下载 &qu ...
- Build 2016: 发布明天的云创新来服务今天的开发者
每个企业和行业都在被云潜移默化地改变着.随着云计算的速度.规模和灵活性的不断增加,云服务带来的可能性也在不断被拓展.想象一下,通过监测传感器,一位奶农能够将他的奶牛牛奶产量提高:或是一家医院能够自动监 ...
- Scrapy框架Windows下安装
在windows下安装好Python3 后,安装Scrapy也有许多种方法,我这里采用pip 安装.前提您已经安装了pip 直接在cmd命令行中 pip install Scrapy building ...
- Asp.net让某一页设置成gb2312或utf-8的方法
有些需求,一定要用到utf-8格式,在web.config里面设置<globalization requestEncoding="utf-8" ...
- Anaconda套件,精簡版miniconda
雖然Anaconda會預先安裝豐富的套件模組,尤其是在數據科學領域方面,有非常豐富的寶藏, 大多範例或教學或許為了節省後續的麻煩,不解釋為什麼,直接就安裝Anaconda 就對了: 但是大部份的模組套 ...