首先我要说一下,我得作业我尽力了,但是能力有限,还需练习。

四则运算,改进代码流程:

1.手动输入算式(属于中缀表达式)

2.将中缀表达式转化成后缀表达式 生成out数组

3.一个操作数栈,一个运算符栈,按照后缀表达式计算方法将out中的字符分别放入两个栈

4.当操作数栈只有一个数时结束计算。

代码分段解析如下:

中缀变后缀:

public List<String> SolveOrder(String[] in,HashMap<String,Integer>precedence){
//符合逆波兰式(后缀)的输出
List<String> out = new ArrayList<String>();
//操作符
Stack<String> ops= new Stack<String>();
for(int i=0;i<in.length;i++){
String s=in[i];
//碰见数值 就放进out数组末尾
if(!precedence.containsKey(in[i])){
out.add(s);
continue;
}
while(true){
//当存储操作符的栈中“空”或“遇见左括号”或“栈顶的运算符优先级
// 小于读取字符串当前字符的优先级”时,符号入栈
if(ops.isEmpty()||s.equals("(")||(precedence.get(s)
>precedence.get(ops.peek()))){
ops.push(s);
break;
}
String op=ops.pop();//出栈得运算符
if(op.equals("(")){
break;
}else{
out.add(op);
}
}
}
//若操作符栈不为空,就依次将剩余的操作符放入out数组
while(!ops.isEmpty()){
out.add(ops.pop());
}
return out;
}

根据后缀(逆波兰式)计算。

public double calculateOut(String[] out) {
//假设满足逆波兰式的输出不为空却长度不为零
assert (out != null && out.length != 0);
//操作数栈
Stack<Double> stack = new Stack<Double>();
for (int i = 0; i < out.length; i++) {
if (isNumber(out[i])) {
stack.push(Double.parseDouble(out[i]));
} else {
double v1 = stack.pop();
double v2 = stack.pop();
double result = eval(out[i], v2, v1);
stack.push(result);
}
}
return stack.pop();
}

主函数:控制台输入完整算式。

    public static void main(String[] args) {
System.out.println("请输入要计算的算式:");
Scanner sc= new Scanner(System.in);
String inBefor = sc.nextLine();
String[] in=inBefor.split("");
Cal cc = new Cal();
HashMap<String, Integer> precedence=cc.priorityInfo();;
cc.SolveOrder(in, precedence);
System.out.println("所输入的算式结果为:"+cc.calculateOut(in)); }

老师,这段代码我是看的别人博客上写的,只能说我看懂了,还没到您要求的变成自己的,但是,老师 ,我实在写不动了。。

关于结对编程,从上这门课是从无到有的认识。编程这种东西就像思想,两个人share就是两个人都有两种。争吵中才会进步。

1.最开始的争论是关于用java还是c++?由于我俩未来可能想更多的使用java所以,最后决定用java。

2.关于复杂运算有两种思想:对五个数字产生的四个运算符 进行讨论,四个位置分别讨论+—*/另一种就是使用堆栈进行计算,最后还是堆栈代码量比较小,选定!

3.关于数字与符号的存储方式,一种是用类,一种是分为两个数组。用类,在处理数组与字符的int String类型上不方便,最后决定用两个数组。

4.最后的代码加不加原来的两个操作数的代码,最后没加。

5.代码还有一点问题,发不发博客?最后还是发了。。。

结语:我去睡觉了,现在已经5:27了

代码地址:https://git.coding.net/yumiaomiao/Arithmetic.git

ssh:git@git.coding.net:yumiaomiao/Arithmetic.git

【week2】结对编程-四则运算 及感想的更多相关文章

  1. 20175226 2018-2019-2《java程序设计》结对编程-四则运算(第一周-阶段总结)

    结对编程-四则运算(第一周-阶段总结) 需求分析 实现一个四则运算程序,要求: 自动随机生成小学四则运算题目(加,减,乘,除) 支持整数.真分数且支持多项式 能够利用栈的思想,将中缀转换为后缀表达式 ...

  2. 20175305张天钰Java结对编程四则运算(二)

    Java结对编程四则运算(二) 一.题目描述及要求 Git提交粒度不要太粗,建议一个文件/一个类/一个函数/一个功能/一个bug修复都进行提交,不能一天提交一次,更不能一周一次,参考Commit Me ...

  3. 20175305张天钰Java结对编程四则运算

    Java结对编程四则运算 一.题目描述:如何对表达式进行求值运算呢 1.中缀表达式与后缀表达式(娄老师讲解) 中缀表达式就是运算符号在运算数中间的表达式,比如1+2,顾名思义,后缀表达式就是运算符在运 ...

  4. 结对编程--四则运算(Java)萧英杰 夏浚杰

    结对编程--四则运算(Java)萧英杰 夏浚杰 Github项目地址 功能要求 题目:实现一个自动生成小学四则运算题目的命令行程序 使用 -n 参数控制生成题目的个数(实现) 使用 -r 参数控制题目 ...

  5. 结对编程--四则运算(Java)梅进鹏 欧思良

    结对编程--四则运算(Java)梅进鹏 欧思良 Github项目地址:https://github.com/MeiJinpen/Arithmetic 功能要求 题目:实现一个自动生成小学四则运算题目的 ...

  6. 王译潇20162314 实验报告三plus结对编程四则运算第一阶段

    北京电子科技学院BESTI实验报告 课程:程序设计与数据结构 班级: 1623 姓名: 王译潇 学号:20162314 指导教师:娄佳鹏老师.王志强老师 实验日期:2017年5月12号 实验密级: 非 ...

  7. Java结对编程四则运算一周小结

    Java结对编程四则运算一周小结 需求分析 对于四则运算来说最主要的就是要计算出产生的式子(字符串的形式). 设计思路 总体可将这个项目分解为几个部分:产生式子,计算式子,判断对错并记录: 具体的思路 ...

  8. 结对编程四则运算gui

    码市地址:https://git.coding.net/linzhao/sizeyunsuangui.git 林 钊 -- 201421123105 吴世荣 -- 201421123119 王坤彬 - ...

  9. 结对编程-四则运算-GUI

     201421123022 王若凡        201421123026  欧阳勇 https://git.coding.net/ttoyy/sizeyunsuan-GUI.git a.需求分析: ...

随机推荐

  1. Ubuntu中 MySQL 的中文编码问题

    使用Ubuntu在安装好MySQL数据库之后,如果直接创建数据库,再创建数据表,那么是无法向字段插入中文的,会报Incorrect string value错误. c实现编码设置的两种方法: (1)动 ...

  2. Hive的内置函数

    定义: UDF(User-Defined-Function),用户自定义函数对数据进行处理. UDTF(User-Defined Table-Generating Functions) 用来解决 输入 ...

  3. STM32(11)——DMA

    简介: DMA:Direct Memory Access,直接存储器访问.DMA传输数据从一个地址空间复制到另外一个地址空间.当CPU初始化这个传输动作,传输动作本身就是DMA控制器来实现和完成.典型 ...

  4. Applied Cloud Deep Semantic Recognition: Advanced Anomaly Detection(应用云深层语义识别:高级异态检测)

    亚马逊链接 引言 (by Mehdi Roopaei & Paul Rad) 异态检测与情境感知 在数据分析领域,异态检测讲的是在一个数据集中,发现到其中不符合预期模式的物体,动作,行为或事件 ...

  5. 北京Uber优步司机奖励政策(1月28日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  6. 武汉Uber优步司机奖励政策(1月11日~1月17日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  7. 青岛Uber司机奖励政策(8月31号~9月6号)

    本周的奖励规则如下,请各位司机朋友按照自己的情况查询. 人民优步(People’s Uber) 滴滴快车单单2.5倍,注册地址:http://www.udache.com/如何注册Uber司机(全国版 ...

  8. JavaScript---复选框全选的多种实现

    <script language=javascript> //第一种方法 function selectall1() {    var a = document.getElementsBy ...

  9. SQL注入的原理与预防

    1. 什么是SQL注入? SQL注入是常见的网络攻击方式之一,通过SQL语句实现无账号登录,非法获取甚至篡改数据库中的数据. 2. SQL注入的思路 (1)找到SQL注入位置: (2)判断服务器类型和 ...

  10. hdu1051 Wooden Sticks(贪心+排序,逻辑)

    Wooden Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...