java 四则混合运算 计算器
public class Counter {
/**用递归算法,把括号内的公式算出然后递归
* @param args
*/
public static void calculator (String str){
//System.out.println(str);
//装载到StringBuffer提升效率
StringBuffer cstr= new StringBuffer(str);
//用正则把算式内的剩除符号和数字分组,
Pattern p=Pattern.compile("\\-?[0-9]+(\\.[0-9]+)?|[*/]");
if(cstr.length()==0)System.out.println("请输入计算式");
//找出最后一个括号的坐标
int start=cstr.lastIndexOf("(");
//叛断公式是否还有括号
if(start!=-1){
int end=cstr.indexOf(")",start);
StringBuffer spstr=new StringBuffer( cstr.subSequence(start+1, end));
//删去截去的括号内的基本公式
cstr=cstr.delete(start, end+1);
//正则匹配
Matcher m =p.matcher(spstr);
List numlist=new ArrayList();
//把基本公式的值和乘除符号加入到给组
while(m.find()){
numlist.add(m.group());
}
//调用计算方法并返回结果
StringBuffer str1=count(numlist);
//把结果INSERT到指定位置
cstr=cstr.insert(start, str1);
}else{
//最后一次无括号计算基本公式并打印最终结果
Matcher m =p.matcher(cstr);
List numlist=new ArrayList();
while(m.find()){
numlist.add(m.group());
}
StringBuffer str1=count(numlist);
System.out.println(str1);
return;
}
//递归数组
// System.out.println(cstr);
calculator(new String(cstr));
}
/**
*
* @param list 接收基本公式数组
* @return 返回计算结果字符串
*/
private static StringBuffer count(List list){
// System.out.println(list);
double num = 0;
for (int i = 0; i < list.size(); i++) {
if(list.get(i).equals("*")||list.get(i).equals("/")){
Double d=list.get(i).equals("*")?Double.parseDouble((String) list.get(i-1))*Double.parseDouble((String) list.get(i+1)):Double.parseDouble((String) list.get(i-1))/Double.parseDouble((String) list.get(i+1));
list.add(i-1, d+"");list.remove(i);list.remove(i);list.remove(i);
i=i-1;
}
}
for (int i = 0; i < list.size(); i++) {
num+=Double.parseDouble((String) list.get(i));
}
return new StringBuffer(num+"");
}
public static void main(String[] args) {
calculator("3+2+((5-6)*(-3+3/2)/2)");
}
}
java 四则混合运算 计算器的更多相关文章
- 用C++实现的有理数(分数)四则混合运算计算器
实现目标 用C++实现下图所示的一个console程序: 其中: 1.加减乘除四种运算符号分别用+.-.*./表示, + 和 - 还分别用于表示正号和负号. 2.分数的分子和分母以符号 / 分隔. 3 ...
- 如何处理加括号的四则混合运算表达式——基于二叉树的实现(Eclipse平台 Java版)
记得上<数据结构>课程时,利用栈的特性解决过四则混合运算表达式.而如今在编写小型关系数据库的时候,编译部分要处理where后面的逻辑表达式——检查语法正确与否的同时,还要将信息传给下一个接 ...
- java 解析四则混合运算表达式并计算结果
package ch8; import java.util.LinkedList; import java.util.List; import java.util.Stack; /** * 四则混合运 ...
- 软件工程学习之小学四则混合运算出题软件 Version 1.00 设计思路及感想
对于小学四则混合运算出题软件的设计,通过分析设计要求,我觉得为了这个软件在今后便于功能上的扩充,可以利用上学期所学习的<编译原理>一课中的LL1语法分析及制导翻译的算法来实现.这样做的好处 ...
- MathExamV2.0四则混合运算计算题生成器
MathExamV2.0四则混合运算计算题生成器----211606360 丁培晖 211606343 杨宇潇 一.预估与实际 PSP2.1 Personal Software Process Sta ...
- C语言编程学习:写的秒速计算四则混合运算项目
C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...
- 数据结构之栈—强大的四则复杂运算计算器(超过windows自带的科学计算器)【中缀转后缀表达式】
比windows自带计算器还强的四则复杂运算计算器! 实测随机打出两组复杂算式:-7.5 * 6 / ( -2 + ( -6.5 - -5.22 ) )与7.5+-3*8/(7+2) windows ...
- 软件工程学习之小学四则混合运算出题软件 Version 1.1 设计思路及感想
继上次采用形式文法来生成混合运算的算式,由于算法中没有引入控制参数而导致容易产生形式累赘(多余的括号等)的算式.本次更新决定采用一种更为简单有效的生成方式,由给出的一个随机的最终答案S,通过给定的一个 ...
- 带括号的四则混合运算的算符优先算法-----java实现
1:主方法 package com.baidu; import java.text.NumberFormat;import java.util.ArrayList;import java.util.S ...
随机推荐
- 三星note4,微信公众号开发,页面闪退
在做微信公众号开发时,使用三星note4测试,有一个select框闪退的问题出现. 出现该问题的原因是该选择框,设置了appearance:none;属性.查找了官方解释是: 所有主流浏览器都不支持 ...
- FB面经 Prepare: All Palindromic Substrings
Given a string, calculate how many substring is palindrome. Ignore non-char characters. Ignore case; ...
- win7下wamp扩展memcache
1.服务端安装 1.1 下载地址 http://download.csdn.net/detail/feiyuhit/5873533#comment 1.2 安装 将下载的压缩文件夹的memcached ...
- GitHub优秀的Android 开源项目
GitHub上优秀Android开源项目 转载自 : http://my.eoe.cn/sisuer/archive/3348.html http://my.eoe.cn/sisuer/archive ...
- java--面向对象编程
instanceof的用法 静态绑定,即早期绑定,首先找父类 动态绑定,即运行时绑定,new谁找谁 Object o1 = null; //正确的语法,null也是一种特殊的引用数据类型 object ...
- 基于Python,scrapy,redis的分布式爬虫实现框架
原文 http://www.xgezhang.com/python_scrapy_redis_crawler.html 爬虫技术,无论是在学术领域,还是在工程领域,都扮演者非常重要的角色.相比于其他 ...
- OC纯代码全手工打造ScroolView实现翻页
OC纯代码全手工打造ScroolView实现翻页 1. 概述 分为三部分: 上部标题ScrollView 下部内容ScrollView 上部当前页 标示线 2. 效果 上下两部分都随着手势的滑动一块滑 ...
- Keepalived+Nginx提供前端负载均衡+主从双机热备+自动切换
原文链接:http://unun.in/linux/156.html 方案: 采用两台Nginx服务器作为前端,提供静态web内容,分发web请求,一主一从,Keepalived实现状态监测,保证 N ...
- 高斯RBF核函数中Sigma取值和SVM分离面的影响
1:高斯RBF核函数的定义 k(x) = exp(-x^2/(2×sigma)) 在MATLAB中输入一下代码:ezsurf('exp(-x^2/(2*sigma^2))'); 在GOOGLE中输入“ ...
- Swift之UITabBarController 导航控制器颜色的改变
废话不多 直接上代码 self.window = UIWindow(frame: UIScreen.mainScreen().bounds) self.window!.backgroundColor ...