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. sql中的常见报错;

    1.对于某些写的sql懒得判断的: SELECT * FROM sys_part WHERE part_no =(SELECT part_no FROM dbo.sys_part)  --字查询的结果 ...

  2. Win10下VirtualBox安装流程

    一.VirtualBox简介 VirtualBox 是一款开源的虚拟机软件,最初由美国SUN公司开发,后来SUN被Oracle收购,VirtualBox 更名为Oracle VirtualBox .不 ...

  3. C#生成树形结构泛型类

    C#生成树形结构泛型类,使用方法: ToTree<ShowMessageUpdatesTableTreeViewModel>.ToDo(models) public class ToTre ...

  4. Django中的auth模块

    from django.contrib import auth authenticate() 提供了用户认证功能,即验证用户名以及密码是否正确,一般需要username .password两个关键字参 ...

  5. PTA变成总结1

    1)实验代码 #include<stdio.h>int main(){ int N,k,n,i,j,p,m,ge; char op; while(1){  scanf("%d % ...

  6. C#分割字符串并统计重复出现的次数

    static void Main(string[] args) { string ss = "12345678904682qwertyuioplkjhgfdsazxcvbnmmlpokuhy ...

  7. CDH5.15.1 hive 连接mongodb配置及增删改查

    1. 下载 wget http://repo1.maven.org/maven2/org/mongodb/mongo-hadoop/mongo-hadoop-hive/2.0.2/mongo-hado ...

  8. day49 定位布局和过渡动画

    复习 1.盒子在父级水平居中 margin: 0 auto; 2.文本样式操作 color: red; text-align: center; font: 900 30px/200px "S ...

  9. Spring:AOP

    摘要 本文内容为我在网上搜集Spring AOP资料的汇总.摘抄. AOP是一种编程思想,其对不同对象进行了横向的抽象,将不同对象的.和主流程无关的公共逻辑抽象出来以方便维护.AOP的实现基础为AOP ...

  10. tp3.2 上传文件及下载文件

    公共方法 UploadFile.class.php() // 开始 , , , ,];];,; ;; ::::::;,) {//文件上传失败 //捕获错误代码$this->error($file ...