20172333 2017-2018-2 《程序设计与数据结构》四则运算报告(2)

20172333 2017-2018-2 《程序设计与数据结构》实验2报告(2)

1.结对成员

严域俊20172333

2.小组结对合作图片


3.项目中自己负责的部分

package ddaadada;
import java.util.*;
public class LT {

    public char[] op = {'+','-','*','/','(',')'};
    public String[] strOp = {"+","-","*","/","(",")"};
    public boolean isDigit(char c){
        if(c>='0'&&c<='9'){
            return true;
        }
        return false;
    }
    public boolean isOp(char c){
        for(int i=0;i<op.length;i++){
            if(op[i]==c){
                return true;
            }
        }
        return false;
    }
    public boolean isOp(String s){
        for(int i=0;i<strOp.length;i++){
            if(strOp[i].equals(s)){
                return true;
            }
        }
        return false;
    }
    /**
     * 处理输入的计算式
     * @param str
     * @return
     */
    public List<String> work(String str){
        List<String> list = new ArrayList<String>();
        char c;
        StringBuilder sb = new StringBuilder();
        for(int i=0;i<str.length();i++){
            c = str.charAt(i);
            if(isDigit(c)){
                sb.append(c);

            }
            if(isOp(c)){
                if(sb.toString().length()>0){
                    list.add(sb.toString());
                    sb.delete(0, sb.toString().length());
                }
                list.add(c+"");
            }
        }
        if(sb.toString().length()>0){
            list.add(sb.toString());
            sb.delete(0, sb.toString().length());
        }
        return list;
    }
    public void printList(List<String> list){
        for(String o:list){
            System.out.print(o+" ");
        }
    }
    /**
     * 中缀表达式转化为后缀表达式
     * 1,遇到数字输出
     * 2,遇到高优先级的全部出栈
     * 3,最后全部出栈
     */
    public List<String> InfixToPostfix(List<String> list){
        List<String> Postfixlist = new ArrayList<String>();//存放后缀表达式
        Stack<String> stack = new Stack<String>();//暂存操作符
        //stack.push('#');
        for(int i=0;i<list.size();i++){

            String s = list.get(i);
            if(s.equals("(")){
                stack.push(s);
            }else if(s.equals("*")||s.equals("÷")){
                stack.push(s);
            }else if(s.equals("+")||s.equals("-")){
                if(!stack.empty()){
                    while(!(stack.peek().equals("("))){
                        Postfixlist.add(stack.pop());
                        if(stack.empty()){
                            break;
                        }
                    }
                    stack.push(s);
                }else{
                    stack.push(s);
                }
            }else if(s.equals(")")){
                while(!(stack.peek().equals("("))){
                    Postfixlist.add(stack.pop());
                }
                stack.pop();
            }else{
                Postfixlist.add(s);
            }
            if(i==list.size()-1){
                while(!stack.empty()){
                    Postfixlist.add(stack.pop());
                }
            }
        }
        return Postfixlist;
    }
    /**
     * 后缀表达式计算
     */
    public int doCal(List<String> list){
        Stack<Integer> stack = new Stack<Integer>();
        for(int i=0;i<list.size();i++){
            String s = list.get(i);
            int t=0;
            if(!isOp(s)){
                t = Integer.parseInt(s);
                stack.push(t);
            }else{
                if(s.equals("+")){
                    int a1 = stack.pop();
                    int a2 = stack.pop();
                    int v = a2+a1;
                    stack.push(v);
                }else if(s.equals("-")){
                    int a1 = stack.pop();
                    int a2 = stack.pop();
                    int v = a2-a1;
                    stack.push(v);
                }else if(s.equals("*")){
                    int a1 = stack.pop();
                    int a2 = stack.pop();
                    int v = a2*a1;
                    stack.push(v);
                }else if(s.equals("÷")){
                    int a1 = stack.pop();
                    int a2 = stack.pop();
                    int v = a2/a1;
                    stack.push(v);
                }
            }
        }
        return stack.pop();
    }

4.个人贡献度划分

可以说应该算是各自百分之五十吧,因为我们组内就两个人,所以分工很明确的,由他完成题目输出而我则是中缀转后缀,但是现在面临合并的问题,然后我两共同思考编写方法,所以没有说谁偷懒之类的,大家都很努力编写,也希望尽快完成吧。


5.相关代码截图

1.生成题目(一共四级题目+-*/,每一级都可能含有分数随机的)

2.中缀转后缀加计算 图1234

3.判断答案及其正确率 图1


6.关键代码

1.生成题目(代码上一部分有)

  • [x] 思路解释:我们原本是要用符号个数来代表题目等级的,后来涉及到中缀转后缀不方便,就换了一个思路,那就是分为0,1,2,3四个等级,每一个等级都只有两个数进行+——*/等运算,在这个运算中随机可能会含有分数形式的一个输出题目。
    ### 2.中缀转后缀(代码备注中有)
  • [x] 思路解释:第一步处理题目,第二步
    中缀表达式转化为后缀表达式 1遇到数字输出 2遇到高优先级的全部出栈 3最后全部出栈,第三步后缀表达式计算。
    ### 3.判断结果并输出正确率
  • [x] 思路解释:就是单纯的布鲁型If判断语句,最后在输出正确答案,至于输出正确率则是在生成题目中含有。

7.遇到的困难及解决方法

  • [x] 1.最最严重的问题:由于之前刚开始的单独作战,导致了一个非常严重的问题,我做的题目输出是一次性多次题目出现,而李楠的中缀转后缀是只接受一个题目,就会导致我们现在完全对接不上,导致这个四则运算没有完成。

解决方法:目前尚未解决。

参考资料

2017-2018-2 1723 『Java程序设计』课程 结对编程练习_四则运算

结对编程项目-四则运算

S.O.L.I.D 原则

原文地址:https://www.cnblogs.com/linanlalala/p/9011544.html

时间: 2024-10-05 23:34:27

20172333 2017-2018-2 《程序设计与数据结构》四则运算报告(2)的相关文章

20172333 2017-2018-2 《程序设计与数据结构》实验四则运算报告

20172333 2017-2018-2 <程序设计与数据结构>实验四则运算报告 1.结对成员 李楠20172330 担任角色(团队分工) [x] 1.前期分析流程 领航员:严域俊 操作员:李楠 原因:我对于整个四则运算过程要求进行一一确定需要编写什么样的类,而李楠则是对于我们要编写的类寻找一些方法来进行实现,以及如何方便快捷的进行编写. [x] 2.中期各自分工编写类 该阶段主要是进行各自任务分工,由于之前的讨论我们的目的较为明确分为三个步奏,第一是我进行编写一个可以随机生成不同等级的题目类

20172333 2017-2018-2 《程序设计与数据结构》实验2报告(最终版)

20172333 2017-2018-2 <程序设计与数据结构>实验2报告(最终版) 1.结对成员 李楠20172330 领航员:李楠 驾驶员:严域俊 成绩分配:五五开 2.相关测试过程及截图 [x] 完整一套流程截图(创建题目,中缀转后缀,计算后缀,对比答案,答案正确个数.) [x] 分数测试类单独测试截图 [x] 整数测试类单独测试截图 [x] 中缀转后缀单独测试截图 3.测试中遇到的问题及解决办法 这周主要问题所在:由于在最后计算测试类编写的时候运用的方法来自几个类的合并,导致了在输出答

20172333 2017-2018-2 《程序设计与数据结构》实验4报告

20172333 2017-2018-2 <程序设计与数据结构>实验4报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 严域俊 学号:20172333 实验教师:王志强 实验日期:2018年5月16日 必修/选修: 必修 1.实验内容 Android程序设计 2.实验过程及结果(一共五个实验.) 第一个提交点 这个实验主要是对于修改res目录中的内容,达到使出现的式子中含有自己的学号图1 第二个提交点 这个实验的要求和书上的内容差不多,就是开发一个Android程能够呼

20172333 2017-2018-2 《程序设计与数据结构》实验5报告

20172333 2017-2018-2 <程序设计与数据结构>实验5报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 严域俊 学号:20172333 实验教师:王志强 实验日期:2018年6月13日 必修/选修: 必修 1.实验内容 任务1: 两人一组结对编程: [x] 参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA [x] 结对实现中缀表达式转后缀表达式的功能 MyBC.java [x] 结对实现从上面功能

20172319 2018.03.05-2018.03.11 《程序设计与数据结构》第1周学习总结

学号20172319 2018.03.05-2018.03.11 <程序设计与数据结构>第1周学习总结 教材学习内容总结 复习上学期导论课所学知识 认识.了解与Java相关的基本知识:二符一字.四类编程语言.三种机器 程序中定义的标识符不能以数字开头且有&符号的标识符无效 教材学习中的问题和解决过程 问题1:什么是URL? 解决过程:上网查询相关资料:URL简单来说就是我们常说的网址,其实是统一资源定位符,包含协议与IP地址,其作用是定位资源及显示其所在位置 代码调试中的问题和解决过程

20172319 2018.03.12-19 《程序设计与数据结构》第2周学习总结

学号 20172319 2018.03.12-19 <程序设计与数据结构>第2周学习总结 教材学习内容总结 1.字符串:基本定义:print与println方法的区别:字符串的拼接:转义序列的应用. 2.变量与赋值:变量:常量:赋值语句. 3.基本数据类型:四整二浮点一字符一布尔. 4.表达式:运算符的种类及其使用规则. 5.数据类型转换:基本数据类型间的转换(扩展及压缩):数据转换方式:赋值(只能扩展).提升.强制. 6.交互式程序:Scanner 类. 教材学习中的问题和解决过程 问题1:

20172333 2018-2019-1 《程序设计与数据结构》第四周学习总结

20172333 2018-2019-1 <程序设计与数据结构>第四周学习总结 教材学习内容总结 6.1 列表集合 列表集合没有内在的容量大小,随着需要而增大 列表集合可以在中间和末端添加和删除元素,区别于队列和栈只能在末端进行添加删除. 列表集合分为三类:有序列表.无序列表.索引列表 有序列表:其元素按照元素的内在特性排序. 无序列表:元素只按照它们在列表的位置进行排序. 索引列表:元素根据自己的数字索引进行排序. 6.4 Josephus问题 列表中的元素每隔i个元素进行提取,直到一个不剩

20172333 2018-2019-1 《程序设计与数据结构》第五周学习总结

20172333 2018-2019-1 <程序设计与数据结构>第五周学习总结 教材学习内容总结 ==<Java软件结构与数据结构>第九章-排序与查找== 一.查找 ①.查找概念: 在一个项目中寻找一个元素或者判断一个元素是否存在在这个项目中. ②.查找的类型: 查找在第九章主要讨论了两种类型,一种是线性查找.另一种是二分查找. ③.查找的目标: 查找实际就是不同元素之间的比较过程,而查找的目标就是为了找到某个元素,在查找的同时保持最高效的性能. 二.线性查找法 ①.线性查找法的概

20172333 2018-2019-1 《程序设计与数据结构》第七周学习总结

20172333 2018-2019-1 <程序设计与数据结构>第七周学习总结 教材学习内容总结 <Java软件结构与数据结构>第十一章-二叉查找树 一.二叉查找树的概念及相关方法 ①思路:二叉查找树与普通的二叉树的区别类似于有序链表与无序链表的差别,二叉查找树因为实现了Comparable接口的类型的对象,所以该二叉树在添加数据到树中的时候就会自动排序,将大于根节点的数据放在右结点,反之则保存在左结点.这样排序好的二叉树方便查找所以叫二叉查找树. ②方法: public inte