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混合运算精度 java实现四则混合运算
转载文章标签 java混合运算精度 java 四则混合运算 计算器 System List 数组 文章分类 Java 后端开发
-
Scala 运算符Scala
-
Opencv读取视频opengl
文章目录一、OpenCV视频I/O概述二、VideoCapture结构体❶先看一下构造函数:❷ VideoCapture中其他函数❸读取视频基本步骤1、读取视频2、下一帧3、释放 三、VideoWriter类❶构造函数❷ 成员函数 前面已经提到过一部分的视频读写:OpenCV–012:视频读写一、OpenCV视频I/O概述OpenCV视频I/O模块是一组用于读取和写入视频或图像序列的类和功能。
Opencv读取视频opengl VideoWriter VideoCapture opencv python