2017-2018-2 20172302 『Java程序设计』课程 结对编程练习_四则运算
1.结对对象
2.本周内容
需求分析
- (1).自动生成题目 
- 可独立使用(能实现自己编写测试类单独生成题目的功能) 
 可生成不同等级题目,类似于:
 1级题目:2 + 5 = 、10 - 5 = 之类的两个数,一个运算符的题目
- (2).题目运算(判题) 
 可独立使用,实现中缀表达式转为后缀表达式并计算;判断用户答题正误,并输出正确结果
- (3).支持真分数 
- 可独立使用,实现分数算式的计算 
- (4).题目去重(扩展需求,加分项) 
- 可独立使用,实现对自动生成表达式的去重:如下若生成:2 + 5 = & 5 + 2 = 为同一题目 
设计分析
- 1.自动生成题目:这里的题目的难度我是采用操作符的个数来定义的,根据操作符再产生操作符加一的数字(这里暂时没有编写真分数的情况),然后使用循环进行产生,然后以字符串形式输出出来。 
- 2.中缀转后缀:这个代码的编写我们两个是交流后各自独立完成的,我采用的是那个使用操作符优先级表生成二维数组,根据索引值进行判断优先级,决定操作符是入栈还是出栈,对于数字直接进行输出,然后最后把栈里所存的操作符再进行逐个输出,完成后缀表达式的输出。 
- 3.后缀求值:这里是由写一个方法:从左向右扫描后缀表达式,遇到操作数进栈,遇到操作符则弹出栈顶的两个元素,将结果计算出来再压进栈,最后栈内剩余一个元素即为最终答案 
设计UML类图(重点!!!)
UML类图的设计见下:

遇到问题及解决方法
代码展示
- 自动生成题目:
package arithmetic;
import java.util.Random;
import java.util.ArrayList;
public class Questions
{
    ArrayList<Object> array = new ArrayList<Object>();
    Random generator = new Random();
    char [] newchar = {'+','-','*','/'};
    protected int number;
    int NUM;
    public Questions()
    {
        number = 0 ;
    }
        public Object getQuestion(int num) {
            int num1 = num;
            while (num > 0) {
                int figure = (int) generator.nextInt(9) + 1;
                array.add(figure);
                number = (int) (Math.random() * 4);
                array.add(newchar[number]);
                num--;
            }
            String obj = "";
            while (num < 2*num1) {
                obj += array.get(num);
                num++;
            }
            int other = (int) generator.nextInt(9)+1;
            array.add(other);
            obj+=other+"=";
            return obj;
        }
    }
- 中缀转后缀:
package arithmetic;
import java.util.Stack;
public class test
{
    private int number,num1,num2;
    private int value1,value2;
    private int index=0;
    private int[][] array = {{0,0,0,0,0},
                                {0,1,1,-1,-1},
                                {0,1,1,-1,-1},
                                {0,1,1,1,1},
                                {0,1,1,1,1}};
    public String obj="2+1-2*2-2/1=";
      Stack stack = new Stack();
    public test()
    {
        num1=0;
        num2=0;
        value1=0;
        value2=0;
    }
    public String getAnswer()
    {
        String result = "";
        while (index<obj.length()-1)
        {
            char x = obj.charAt(index);
            if(x>='0'&&x<='9')
                result += x+" ";
            else
            {
                switch (x)
                {
                    case '+':
                        number = 1;
                        break;
                    case '-':
                        number=2;
                        break;
                    case '*':
                        number =3;
                        break;
                    case '/':
                        number=4;
                        break;
                }
                if(stack.empty()) {
                    num1 = number;
                    number = 0;
                }
                else
                    {
                        num2 = number;
                        number=0;
            }
                if(array[num1][num2]<=0)
                {
                    stack.push(x);
                    value1 +=1;
                }
                else
                {
                    result+=stack.pop();
                    stack.push(x);
                    value1 +=1;
                    value2 +=1;
                }
            }
            index++;
            }
        for(int y =0;y<value1-value2;y++)
            result += stack.pop();
        return result;
    }
}
- 后缀表达式求值:
  
  
  
  
3.PSP分析
|PSP2.1 | 	 Personal Software Process Stages	  |  预估耗时(分钟)| 实际耗时(分钟)|
| --------    | :----------------												
2017-2018-2 20172302 『Java程序设计』课程 结对编程练习_四则运算的更多相关文章
- 20172302『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结
		一.结对对象 姓名:周亚杰 学号:20172302 担任角色:驾驶员(周亚杰) 伙伴第二周博客地址 二.本周内容 (一)继续编写上周未完成代码 1.本周继续编写代码,使代码支持分数类计算 2.相关过程 ... 
- 2017-2018-2 165X 『Java程序设计』课程 结对编程练习_四则运算
		2017-2018-2 165X 『Java程序设计』课程 结对编程练习_四则运算 经过第一阶段的学习,同学们已经熟悉了这门语言基本的用法.在一次又一次对着电脑编写并提交代码,进行练习的时候,有没有觉 ... 
- 2017-2018-2 20172310『Java程序设计』课程 结对编程练习_四则运算_第二周
		2017-2018-2 20172310『Java程序设计』课程 结对编程练习_四则运算_第二周 博客要求 组内同学需各自发表博客 博客中需包含以下内容: 相关过程截图 关键代码解释 遇到的困难及解决 ... 
- 2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算_第三周
		2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算 组队成员: 仇夏 学号: 20172310 博客地址: @王志伟 四则运算第一周博客 @仇夏四则运算第一周博客 ... 
- 2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算——第一周
		2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算 组队成员: 仇夏 学号: 20172310 博客地址:点击这里 1. 需求分析: 可生成题目: - 输入要想生成 ... 
- 2017-2018-2 20165225『Java程序设计』课程 结对编程练习_四则运算
		2017-2018-2 20165225『Java程序设计』课程 结对编程练习_四则运算 需求分析: 支持整数,可进行多运算符运算,有优先级. 设计思路: 在有括号的情况下,先计算得出括号中的结果,如 ... 
- 20172325『Java程序设计』课程 结对编程练习_四则运算第三周阶段总结
		20172325『Java程序设计』课程 结对编程练习_四则运算第三周阶段总结 结对伙伴 学号:20172306 姓名:刘辰 在这次项目的完成过程中刘辰同学付出了很多,在代码的实践上完成的很出色,在技 ... 
- 20172311『Java程序设计』课程 结对编程练习_四则运算第一周阶段总结
		20172311『Java程序设计』课程 结对编程练习_四则运算第一周阶段总结 结对伙伴 学号 :20172307 姓名 :黄宇瑭 伙伴第一周博客地址: http://www.cnblogs.com/ ... 
- 20172311『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结
		20172311『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结 结对伙伴 学号 :20172307 姓名 :黄宇瑭 伙伴第一周博客地址 对结对伙伴的评价:黄宇瑭同学的优势在于能够想出一 ... 
随机推荐
- Spark记录-org.apache.spark.sql.hive.HiveContext与org.apache.spark.sql.SQLContext包api分析
			HiveContext/SQLContext val hiveContext=new HiveContext(new SparkContext(new SparkConf().setAppName(& ... 
- bzoj千题计划232:bzoj4727: [POI2017]Turysta
			http://www.lydsy.com/JudgeOnline/problem.php?id=4727 竞赛图tarjan缩点后得到的拓扑图一定是一条链 因为竞赛图任意两点的前后顺序确定,只有一种拓 ... 
- spring中bean配置和注入场景分析
			bean与spring容器的关系 Bean配置信息定义了Bean的实现及依赖关系,Spring容器根据各种形式的Bean配置信息在容器内部建立Bean定义注册表,然后根据注册表加载.实例化Bean,并 ... 
- Markdown  详细语法
			<< 访问 Wow!Ubuntu NOTE: This is Simplelified Chinese Edition Document of Markdown Syntax. If yo ... 
- HTML5页面开发的基础性模板
			分享一个HTML5页面开发的基础性模板,包含了两个版本: 开发版本 注释版本 开发版本 <!DOCTYPE html> <html> <head> <meta ... 
- HDU 1728 逃离迷宫 BFS题
			题目描述:输入一个m*n的地图,地图上有两种点,一种是 . 表示这个点是空地,是可以走的,另一种是 * ,表示是墙,是不能走的,然后输入一个起点和一个终点,另外有一个k输入,现在要你确定能否在转k次弯 ... 
- zabbix user parameters和Loadable modules的使用方法介绍
			目录 需求 实现 原理 前端配置 后端配置 shell实现 python实现 C实现 需求: 采集主机的-/+ buffers/cache free的数据 实现: 采集/proc/meminfo中的 ... 
- 洛谷 P1563 玩具谜题
			如果你想不耗费脑力做出这个题目,往下看: 本萌新看到这个题目,想到了乘法法则,题目中左右方向要判断两次,很耗脑力,和乘法中的正负号判断非常像. 抽象一点:这个人向内向外就是乘法中括号外的正负号,他的左 ... 
- json 删除、添加对象
			1. 定义json对象 var entryJson = []; 2. 删除.添加对象 entryJson.pop(); //删除最后一个对象 entryJson.push({ //往 ... 
- Android EditText被软键盘遮盖处理
			这两天android app新增了透明栏效果,结果发现键盘弹起后会遮盖屏幕底部的EditText,没有像想象中的调整窗口大小,并滚动ScrollView,将EditText显示在键盘上方.之前也遇到过 ... 
