1.结对对象

20172308周亚杰

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程序设计』课程 结对编程练习_四则运算的更多相关文章

  1. 20172302『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结

    一.结对对象 姓名:周亚杰 学号:20172302 担任角色:驾驶员(周亚杰) 伙伴第二周博客地址 二.本周内容 (一)继续编写上周未完成代码 1.本周继续编写代码,使代码支持分数类计算 2.相关过程 ...

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

    2017-2018-2 165X 『Java程序设计』课程 结对编程练习_四则运算 经过第一阶段的学习,同学们已经熟悉了这门语言基本的用法.在一次又一次对着电脑编写并提交代码,进行练习的时候,有没有觉 ...

  3. 2017-2018-2 20172310『Java程序设计』课程 结对编程练习_四则运算_第二周

    2017-2018-2 20172310『Java程序设计』课程 结对编程练习_四则运算_第二周 博客要求 组内同学需各自发表博客 博客中需包含以下内容: 相关过程截图 关键代码解释 遇到的困难及解决 ...

  4. 2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算_第三周

    2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算 组队成员: 仇夏 学号: 20172310 博客地址: @王志伟 四则运算第一周博客 @仇夏四则运算第一周博客 ...

  5. 2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算——第一周

    2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算 组队成员: 仇夏 学号: 20172310 博客地址:点击这里 1. 需求分析: 可生成题目: - 输入要想生成 ...

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

    2017-2018-2 20165225『Java程序设计』课程 结对编程练习_四则运算 需求分析: 支持整数,可进行多运算符运算,有优先级. 设计思路: 在有括号的情况下,先计算得出括号中的结果,如 ...

  7. 20172325『Java程序设计』课程 结对编程练习_四则运算第三周阶段总结

    20172325『Java程序设计』课程 结对编程练习_四则运算第三周阶段总结 结对伙伴 学号:20172306 姓名:刘辰 在这次项目的完成过程中刘辰同学付出了很多,在代码的实践上完成的很出色,在技 ...

  8. 20172311『Java程序设计』课程 结对编程练习_四则运算第一周阶段总结

    20172311『Java程序设计』课程 结对编程练习_四则运算第一周阶段总结 结对伙伴 学号 :20172307 姓名 :黄宇瑭 伙伴第一周博客地址: http://www.cnblogs.com/ ...

  9. 20172311『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结

    20172311『Java程序设计』课程 结对编程练习_四则运算第二周阶段总结 结对伙伴 学号 :20172307 姓名 :黄宇瑭 伙伴第一周博客地址 对结对伙伴的评价:黄宇瑭同学的优势在于能够想出一 ...

随机推荐

  1. hdu 5385 The path

    http://acm.hdu.edu.cn/showproblem.php?pid=5385 题意: 给定一张n个点m条有向边的图,构造每条边的边权(边权为正整数),令d(x)表示1到x的最短路,使得 ...

  2. day63_SpringMVC学习笔记_01

    1.JAVAEE体系结构 JAVAEE体系结构图如下所示: 2.什么是springmvc? 什么是mvc? Model1 Model2 SpringMVC是什么? SpringMVC是一个web层mv ...

  3. python 喜马拉雅 音乐下载 演示代码

    1.主程序文件 import os import json import requests from contextlib import closing from progressbar import ...

  4. [整理]Win下好用的Markdown工具

    用过haroopad,MarkPad,Sublime + markdown插件,前2款勉强能用,都处于继续开发中,haroopad支持的语法相对较少,提示也不明显,MarkPad还是有不少bug. 后 ...

  5. 【LibreOJ】#6395. 「THUPC2018」城市地铁规划 / City 背包DP+Prufer序

    [题目]#6395. 「THUPC2018」城市地铁规划 / City [题意]给定n个点要求构造一棵树,每个点的价值是一个关于点度的k次多项式,系数均为给定的\(a_0,...a_k\),求最大价值 ...

  6. 进程ID[PID(Process ID)]与端口号[(Port ID)]的联系

    1.首先声明一点:PID不是端口(port id),而是Process ID进程号的意思. 2.那么,什么是进程号? 采集网友的意见就是: 进程号,是系统分配给么一个进程的唯一标识符.PID就是各进程 ...

  7. 第10月第6天 lua 闭包

    1. static int mytest(lua_State *L) { //获取上值 )); printf("%d\n", upv); upv += ; lua_pushinte ...

  8. Django安装配置

    django2.0基础 一.安装与项目的创建 1.安装 pip install django 2.查看版本 python -m django --version 3.创建项目 django-admin ...

  9. QTP设置共享对象库

    第一步:把需要加到共享对象库中的各个用例脚本的对象库,分别导出成.tsr文件. 操作方法:先用QTP打开已经录制完毕的脚本后,选择Resources-->Object Repository.然后 ...

  10. 数据库SQL语句性能优化

    选择最有效率的表名顺序 ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下 ...