20175316与20175329 结对编程练习_四则运算(第二周)

1、需求分析

实现一个命令行程序,要求:

  • 自动生成指定数量的小学四则运算题目(加、减、乘、除)

  • 支持整数

  • 统计正确率

  • 支持多运算符

  • 题目去重

  • 支持真分数

  • 处理生成题目并输出到文件

  • 完成题目后从文件读入并判题

2、设计思路(UML类图)

3、实现过程中的关键代码解释

  • 算法(以加法为例子)
public Shu add(Shu op2)
{
int commonDenominator = denominator * op2.getDenominator();
int numerator1 = numerator * op2.getDenominator();
int numerator2 = op2.getNumerator() * denominator;
int sum = numerator1 + numerator2;
return new Shu (sum, commonDenominator);
}
  • 转换为后缀
public void evaluate(String expr) {
String token;
StringTokenizer tokenizer = new StringTokenizer(expr);
while (tokenizer.hasMoreTokens()) {
token = tokenizer.nextToken();
if (token.equals("("))
stack1.push(token);
else if (token.equals("+") || token.equals("-")) {
while (!stack1.empty()){
if(stack1.peek().equals("(")){
break;
}else list1.add(stack1.pop());
}
stack1.push(token);
}else if (token.equals("*") || token.equals("/")) {
if(!stack1.empty()) {
if (stack1.peek().equals("*") || stack1.peek().equals("/")) {
list1.add(stack1.pop());
stack1.push(token);
} else stack1.push(token);
}else stack1.push(token);
}
else if (token.equals(")")) {
while (!stack1.peek().equals("(")) {
list1.add(stack1.pop());
}
stack1.pop();
}else list1.add(token);
}
while (!stack1.empty()) {
list1.add(stack1.pop());
}
ListIterator<String > li = list1.listIterator();
while (li.hasNext()) {
Message += li.next() + " ";
li.remove();
}
message = Message;
}
  • 判断正误
String tmp = br.readLine();
if (tmp != null) {
if (tmp.indexOf("=") != -1) {
ExpreNum++;
StringTokenizer tokenizer = new StringTokenizer(tmp, "=");
infixToSuffix.evaluate(tokenizer.nextToken());
list3.add(tmp);
if ((" " + cal.evaluate(infixToSuffix.getMessage())).equals(tokenizer.nextToken())) {
list3.add("正确");
trues++;
} else {
list3.add("错误");
list3.add("正确答案为" + cal.evaluate(infixToSuffix.getMessage()));
}
} else list3.add(tmp);
} else break;
  • 生成文件(.txt)
Biaodashi pra = new Biaodashi();
try {
pra.outFile("SIZEYUNSUAN.txt","Practice.txt");
}catch (IOException e){
System.out.println(e);
}

4、运行过程截图

  • 简体中文

  • 边界值测试

5、代码

https://gitee.com/shengmaosong/java-besti-20175316/tree/master/docs7/sizeyunsuan2

6、遇到的困难及解决方法

  • 问题: 生成题目时,我输入想要做的题目难度为0,会出现错误
  • 问题解决方法: 我俩检查了代码之后发现是没有考虑边界值的问题,添加了if-else语句判断输入的值就好了,改过的代码如下:
int many = scan.nextInt();
while (true) {
if (many > 0) {
pra.CreateExpre(Tinumber, many, language);
pra.showC();
System.out.println("\n您答对的题目数为:" + pra.getTrues());
double trues = (double) pra.getTrues() / Tinumber;
System.out.println("您的正确率为:" + nf.format(trues));
System.out.println("\n再来一次输入y重来输入n退出)");
another = scan.nextLine();
break;
} else
System.out.println("输入错误!请重新输入,至少为1!");
many = scan.nextInt();
}
break;

7、PSP

20175316盛茂淞 2018-2019-2《Java程序设计》结对编程项目-四则运算 第二周(6)的更多相关文章

  1. 20175311胡济栋 2018-2019-2《Java程序设计》结对编程项目-四则运算 第二周 阶段性总结

    20175311胡济栋 2018-2019-2<Java程序设计>结对编程项目-四则运算 第二周 阶段性总结 需求分析 这是利用栈来设计一个计算器的第二阶段总结. 自动生成四则运算的题目( ...

  2. 20175324王陈峤宇 2018-2019-2《Java程序设计》结对编程项目-四则运算 第一周 阶段性总结

    20175324王陈峤宇 2018-2019-2<Java程序设计>结对编程项目-四则运算 第一周 阶段性总结 需求分析 这次的结对作业是要求我们利用栈来设计一个计算器. 自动生成四则运算 ...

  3. 20175229许钰玮 2018-2019-2《Java程序设计》结对编程项目-四则运算 第一周 阶段性总结

    20175229许钰玮 2018-2019-2<Java程序设计>结对编程项目-四则运算 第一周 阶段性总结 需求分析 自动生成四则运算题目(加.减.乘.除). 既可以用前缀算法(波兰算法 ...

  4. 2018-2019-2《Java程序设计》结对编程项目-四则运算 第一周 阶段性总结

    码云链接 https://gitee.com/A5320/pair_programming_code 需求分析 实现一个命令行程序,要求: 1.自动生成小学四则运算题目(加.减.乘.除) 2.支持整数 ...

  5. 20175316盛茂淞-Java第1周学习总结

    20175316盛茂淞 2018-2019-2 <Java程序设计>第1周学习总结 教材学习内容总结 Java入门 1.Java简介(地位,特点) 2.安装JDK,设置系统环境 3.编译J ...

  6. 20175316 盛茂淞 2018-2019-2 《Java程序设计》实验五 《网络安全与编程》 实验报告

    20175316 盛茂淞 2018-2019-2 <Java程序设计>实验五 <网络安全与编程> 实验报告 一.实验报告封面 课程:Java程序设计 班级:1753班 姓名:盛 ...

  7. 20175316盛茂淞 2018-2019-2 《Java程序设计》第9周学习总结

    20175316盛茂淞 2018-2019-2 <Java程序设计>第9周学习总结 教材学习内容总结 下载安装MySQL数据库管理系统. 学习<Java程序设计>第十一章MyS ...

  8. 20175316盛茂淞 2018-2019-2 《Java程序设计》第8周学习总结

    20175316盛茂淞 2018-2019-2 <Java程序设计>第8周学习总结 教材学习内容总结 第十五章 泛型 -- 主要目的是可以建立具有类型安全的集合框架,如链表.散列映射等数据 ...

  9. 20175316 盛茂淞 2018-2019-2 《Java程序设计》实验二 面向对象程序设计 实验报告

    20175316 盛茂淞 2018-2019-2 <Java程序设计>实验二 面向对象程序设计 实验报告 (一)单元测试 在 IDEA中我们把产品代码放在src目录中,把测试代码放在tes ...

随机推荐

  1. scala 读取保存文件 去除字符特殊

    /** * 读取文件 * @param filename * @return */ def readFormFile(filename: String) = { var ooop = "&q ...

  2. Git综合使用命令行和gui工具小结

    使用Git的时候,综合使用命令行和gui工具,可以把Git用的最舒服,因此这里总结下使用gui和命令行的一些对应操作, gui中拉取:git pull origin dev_branch gui中推送 ...

  3. activiti官网实例项目activiti-explorer之扩展流程节点属性2

    情景需求:需要查找activiti-explorer项目中获取流程id的方法,然后根据流程id获取相应字段在节点属性中添加内容. 大致流程:拿取整个流程id获取对应表单属性,在页面节点属性中展示对应表 ...

  4. SQL表变量和临时表

    一.表变量 表变量在SQL Server 2000中首次被引入.表变量的具体定义包括列定义,列名,数据类型和约束.而在表变量中可以使用的约束包括主键约束, 唯一约束,NULL约束和CHECK约束(外键 ...

  5. 前端面试之Javascript

    1,JS基本的数据类型和引用类型: (1)基本数据类型:number,string,null,undefined,symbol--栈: (2)引用数据类型:object,array,function- ...

  6. linux下nginx日常操作

    一.检查配置文件语法 [root@node2 /]# nginx -tc /usr/local/nginx/conf/nginx.conf nginx: the configuration file ...

  7. tensorflow安装和初使用

    本文的目的是为了复习并帮助刚开始起步使用机器学习的人员 1.安装准备 为了方便就在window上安装,我的是window10 的笔记本,首先准备python 因为tensorflow在仅仅支持wind ...

  8. MongoDB - 1

    MongoDB - 1   一.初识MongoDB 之 什么东西都得先从理论入手,你说是不是啊? MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展 ...

  9. mongodb突然出现不是内外部命令或可执行

    可能因为晚上突然停电,电脑突然关机,给mongoDB造成影响,第二天出现了: 通过百度搜索与尝试:https://blog.csdn.net/hh12211221/article/details/78 ...

  10. 国内安装helm

    helm repo remove stable helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts ...