20175316盛茂淞 2018-2019-2《Java程序设计》结对编程项目-四则运算 第二周(6)
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)的更多相关文章
- 20175311胡济栋 2018-2019-2《Java程序设计》结对编程项目-四则运算 第二周 阶段性总结
20175311胡济栋 2018-2019-2<Java程序设计>结对编程项目-四则运算 第二周 阶段性总结 需求分析 这是利用栈来设计一个计算器的第二阶段总结. 自动生成四则运算的题目( ...
- 20175324王陈峤宇 2018-2019-2《Java程序设计》结对编程项目-四则运算 第一周 阶段性总结
20175324王陈峤宇 2018-2019-2<Java程序设计>结对编程项目-四则运算 第一周 阶段性总结 需求分析 这次的结对作业是要求我们利用栈来设计一个计算器. 自动生成四则运算 ...
- 20175229许钰玮 2018-2019-2《Java程序设计》结对编程项目-四则运算 第一周 阶段性总结
20175229许钰玮 2018-2019-2<Java程序设计>结对编程项目-四则运算 第一周 阶段性总结 需求分析 自动生成四则运算题目(加.减.乘.除). 既可以用前缀算法(波兰算法 ...
- 2018-2019-2《Java程序设计》结对编程项目-四则运算 第一周 阶段性总结
码云链接 https://gitee.com/A5320/pair_programming_code 需求分析 实现一个命令行程序,要求: 1.自动生成小学四则运算题目(加.减.乘.除) 2.支持整数 ...
- 20175316盛茂淞-Java第1周学习总结
20175316盛茂淞 2018-2019-2 <Java程序设计>第1周学习总结 教材学习内容总结 Java入门 1.Java简介(地位,特点) 2.安装JDK,设置系统环境 3.编译J ...
- 20175316 盛茂淞 2018-2019-2 《Java程序设计》实验五 《网络安全与编程》 实验报告
20175316 盛茂淞 2018-2019-2 <Java程序设计>实验五 <网络安全与编程> 实验报告 一.实验报告封面 课程:Java程序设计 班级:1753班 姓名:盛 ...
- 20175316盛茂淞 2018-2019-2 《Java程序设计》第9周学习总结
20175316盛茂淞 2018-2019-2 <Java程序设计>第9周学习总结 教材学习内容总结 下载安装MySQL数据库管理系统. 学习<Java程序设计>第十一章MyS ...
- 20175316盛茂淞 2018-2019-2 《Java程序设计》第8周学习总结
20175316盛茂淞 2018-2019-2 <Java程序设计>第8周学习总结 教材学习内容总结 第十五章 泛型 -- 主要目的是可以建立具有类型安全的集合框架,如链表.散列映射等数据 ...
- 20175316 盛茂淞 2018-2019-2 《Java程序设计》实验二 面向对象程序设计 实验报告
20175316 盛茂淞 2018-2019-2 <Java程序设计>实验二 面向对象程序设计 实验报告 (一)单元测试 在 IDEA中我们把产品代码放在src目录中,把测试代码放在tes ...
随机推荐
- Python module ---- getopt
optlist, argv = getopt.getopt(argv, 'cdsarRvn:e:E:f:F:w:O:m:M:o:g:') 模块getopt用于分割了main函数的参数,参数args一般 ...
- sphinx-2.1.9的安装使用
1.下载/编译安装 cd /usr/local/src wget http://sphinxsearch.com/files/sphinx-2.1.9-release.tar.gz tar -xf s ...
- time_wait的快速回收和重用
TCP四次挥手: Time_wait产生原因及作用: 1. time_wait状态如何产生? 由上面的变迁图,首先调用close()发起主动关闭的一方,在发送最后一个ACK之后会进入time_wait ...
- SSRS表达式里引用.net dll
在SSRS的表达式里使用了一个.NET的DLL,用来生成条码图片,发布以后用不了. 需要修改一个SSRS的权限配置项,确保Report_Expressions_Default_Permissions的 ...
- (转)IIS7无法读取配置文件解决办法
web.config 太大导致”出现无法读取配置文件,因为它超过了最大文件大小”错误问题的解决方法,如下:HKLM\SOFTWARE\Microsoft\InetStp\Configuration\M ...
- .Net23种设计模式
C#常见的设计模式 一.概要: 模式分为三种,设计模式.体系结构模式与惯用法.其中惯用法是一种语言紧密相关的模式,例如,定界加锁模式其实是一种惯用法. 在C#项目开发过程中,很多情况下您已经使用了某些 ...
- 音视频处理概要 markdown
最近要想办法把录制的音视频进行拼接. 比方说此次录制的视频有三段,通过高清直播编码器录制,录制下的标准为h.264 直接用ffmpeg简单拼接,音频会丢失,所以有了此次解决方案(有可能会繁琐,简单方案 ...
- java中java.exe,javac 在editplus中的配置
java.exe,javac设置快捷键(editplus) 1.tools-preferences 2.add tools---program java关键字
- snmp监控f5
1.硬盘各分区使用情况 2.pool数量.vs数量 3.cpu使用率 4.内存使用率 5.电源 6.风扇 7.端口状态及流量 8.HA状态(主备情况及HA是否处于建立状态) 9.主备机同步状态
- Maven解决NoPluginFoundForPrefixException错误
Maven解决NoPluginFoundForPrefixException错误方法 错误出现的原因 你指的是一个不存在的插件,如由于错误的前缀. 您使用的是第三方的Maven插件没有部署到中央Mav ...