基于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 (抽象窗口工 ...
随机推荐
- 使用JS完成注册表单的数据校验
1.前台校验 防君子不防小人 JavaScript被设计用来向HTML页面添加交互行为 JavaScript是一种脚本语言(脚本语言是一种轻量级的编程语言) JavaScript由数行可执行计算机代码 ...
- vue双向绑定笔记
原文:https://github.com/louzhedong/blog/issues/4 <!DOCTYPE html> <html lang="en"> ...
- React Native之React速学教程(上)
概述 本篇为<React Native之React速学教程>的第一篇.本篇将从React的特点.如何使用React.JSX语法.组件(Component)以及组件的属性,状态等方面进行讲解 ...
- 【Python】回文palindrome——利用字符串反转
回文 palindrome Python 字符串反转string[::-1] Slice notation "[a : b : c]" means "count in i ...
- 【JAVA语法】04Java-多态性
多态性 instanceof 关键字 接口的应用 一.多态性 1.多态性的体现: 方法的重载和重写 对象的多态性 2.对象的多态性: 向上转型: 程序会自动完成 父类 父类对象 = 子类实例 向下转型 ...
- javascript模块化以及加载打包
https://addyosmani.com/writing-modular-js/ 一些术语: 模块:可以理解为一个js文件,就像你以前需要import的那个文件一样:module不一定非要是一个外 ...
- 【SQL重温】面试之数据库基础练习
简介 最近在练习SQL基础,首先感叹一下,在机器上写和在纸上写还是有区别的. 本文的练习题目请点击此链接进行查看:http://www.cnblogs.com/edisonchou/p/3878135 ...
- 【解决方法】jdb2/sdb1-8 io使用过高
机器上面跑的mysql,使用的ssd告诉硬盘,但是 使用iotop发现这个进程 jdb2/sdb1-8 使用率高达80%多, 后来发现是因为参数 sync_binlog=1 导致,事务写入太频繁,改为 ...
- vagrant 安装虚拟机
目录 搭建属于你的环境 安装virtualbox 安装 vagrant vagrant 添加系统镜像box 新建虚拟机 相关配置 ==遇到问题== [TOC] 搭建属于你的环境 安装环境有时也是头疼的 ...
- June 28th 2017 Week 26th Wednesday
Anger begins with folly, and ends in repentance. 愤怒以愚蠢开始,以后悔告终. Learn to control your temper, don't ...