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. list<T>升序、降序

    List<test> list = new List<test> (); var result = list.OrderByDescending(p => p.we).T ...

  2. 非web环境的注解配置的spring项目应用(non-web, Spring-data-jpa, JavaConfig, Java Application, Maven, AnnotationConfigApplicationContext)

    非web环境的spring应用 springframework提供的spring容器,非常适合应用于javaweb环境中. 同时,spring组件的低耦合性为普通java应用也提供了足够的支持. 以下 ...

  3. python之路:变量与变量基本操作(老王版)

    python开发之路:变量与变量基本操作 你是一个师范大学的优秀毕业生,现在在某某小学工作. 你想:判作业真的很累,隔壁老王现在天天玩<蓝月传奇>,银行里存满了钱.唉,每节课1个小时,每个 ...

  4. Grafana短信报警实现

    1.阿里云短信服务API2.Jenkins-plugin:Generic Webhook Trigger Plugin 阿里云 下载阿里云短信服务SDK 创建短信服务ACCESS_KEY_ID Gra ...

  5. camstart API 服务器负载均衡

    docker 安装haproxy docker pull haproxy 创建配置文件到:D:/docker/haproxy 配置文件内容如下 # 配置文件 # 全局配置 global # 设置日志文 ...

  6. java operate

    class OperateDemo { public static void main(String[] args) { /* + - * / %(取余数) */ int x = 2810; Syst ...

  7. Java简单操作dubbo(一)

    dubbo-service公共Service package com.itman.service; public interface UserService { // 提供服务 使用userId查找用 ...

  8. 自己电脑组一个Wifi热点

    ① 在cmd窗口 ssid 是wifi名称.key是密码 netsh wlan set hostednetwork mode=allow ssid=yb key=15564130 ② ③ 运行脚本 新 ...

  9. linux下mycat自启动方法

    每次开机都要启动mycat,网上看了好多都是用shell脚本来实现mycat开机自启动,后来看到一种方法,直接修改系统文件来实现,已经实践过,方法有效. 1.修改脚本文件rc.local:vim /e ...

  10. JS-jquery对象和dom对象的属性操作区别

    <label class="">时间1</label> <label class="">时间2</label> ...