热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

20162329张旭升阶段四则运算(挑战出题)

阶段编程四则运算(挑战出题)结队成员:刘伟康学号:20162329期望分数分配:30%刘伟康,70%张旭升一.需求分析1.在命令行参数中输入题目数量和等级后可将题目输出到文件中(只出题不判题)注

阶段编程四则运算(挑战出题)

结队成员: 刘伟康

学号: 20162329

期望分数分配: 30%刘伟康,70%张旭升

一.需求分析

1.在命令行参数中输入题目数量和等级后可将题目输出到文件中(只出题不判题)

注:该功能我们在两周之前就已经可以达到了(但是上周的结对编程四则运算中却没有给我们加这部分分值)所达到的效果如下:

2.生成题目中去除重复题目

3.(个人拓展)可以使用户在文件中作答后运行另一个程序判断正误且结果写入另一个文件

java OutputTest.java FileName1 FileName2

二.设计思路

UML类图:

这次的项目我还是在上次的四则运算的基础上完成的,因为之前就已经完成了题目输出至文件的功能,这次只需要修改其支持命令行参数和支持去重即可,具体解释如下:
对于修改命令行参数:
我设计的题目生成的方法需要传入两个int类型的参数,即题目数量和题目的题目等级(运算符号的多少),在main函数中将命令行参数中输入的第一个和第二个参数都使用Integer.parseInt()方法转化为int类型然后传给生成题目的方法。
对于题目去重(根据计算答案):
我在生成题目的方法中将生成的每一个题目都放在一个列表中,然后在每生成一个题目时就会先对题目进行计算,将计算的答案传入另一个列表,然后利用indexOf方法来判断前面放入该列表的答案是否有和该答案重复的,如果有就去掉改答案对应的题目。

三.关键代码解释

            for (String i : list1)   
ti += i;
StringTokenizer tokenizer = new StringTokenizer(ti);
while (tokenizer.hasMoreTokens()) {
char N = tokenizer.nextToken().charAt(0);
list3.add(N);
}
list1.clear();
Collections.sort(list3);
for(char i:list3)
Ti += i;
list3.clear();
ori.evaluate(ti);
String restrult = count.evaluate(ori.getMessage());
if (list2.indexOf(restrult) >= 0)
if (list4.indexOf(Ti)>=0)
j--;
else if(Ti.indexOf("(")>=0)
j--;
else {
list4.add(Ti);
list.add(ti);
}
else {
list2.add(restrult);
list4.add(Ti);
list.add(ti);
}

以上代码取自src -> Practice.java -> 64行至90行


  • list中存放的是带输出的式子
  • list1中存放的是一个一个的数和运算符和括号
  • list2中存放的是答案
  • list3中存放的是排序或待排序的式子
  • list4中存放的是存放排序后不重复的式子
  • 利用简易的for循环将其中的元素取出来然后累加在一起就成为了一个完整的运算式
  • 将式子以空格为分隔符分成char类型的单字符存入list3
  • list1清空以便于下一道题目的生成,然后运用sort方法对list3进行排序
  • 遍历出list3中的元素累加后赋值给变量Ti
  • 清空list3便于下一个题目的判断
  • 将生成的题目作为参数传给后缀表达式的转换方法ori.evaluate()
  • 将该题计算的答案传入list2
  • 对答案进行判断,是否list2中已经存在该答案,如果存在的话就再判断list4中是否存在排序后依旧相同的式子,如果存在就重新出题,如果不存在就再排除掉因为不同位置加括号所以重复的题目之后将该题目加入输出列表list,如果list2中不存在相同答案就把该题目传入输出列表list等待输出。

四.测试方法


运用老师给出的测试工具测试


结果如下:






五.运行过程截图




六.代码托管

七.遇到的困难即及解决方法

问题 解决方案
问题1:因为之前我们使用的去重方法是只用答案去重,并且我们的数据中存在分数,并不满足输出需求,当将分数去掉后我们的去重方法就出现了问题,就是在测试100道一个运算符的题目时题目会不足100个导致程序会进入一个死循环,具体问题是程序将把类似3 -36-67-7等都当做一个题目,对此问题解决方案如下。 我们的具体解决方案就是对去重结构进行调整,我们在判断答案相同后会再进行一个判断,就是将题目中的元素按一定顺序排序后比较是否相同,只有题目相同,式子相同才会被当做一个题目去掉。
问题2:上一个问题解决后我们运行程序,又出现了一个问题,就是当加括号时可能会出现把4+7+6/86/8+(4+7)当做不同的题目,对此问题解决方案如下 我们又在式子判断不同的情况下又加了一个判断,是否是因为有括号而不同,就排除了因为括号而判断错误的情况!

八.对结队伙伴的评价


对于我的结队伙伴刘伟康同学,他的问题还比较多,在我看来他的很多思想都是很好的,但是他总是不去自己试着实现,有想法总是先告诉我(这一点没问题)然后我说“嗯,不错你去做出来”,他每次回答都是不会,导致许多东西都是我来做的。但是好在他写博客非常认真,这也是他每次分数都比我高的原因,因为老师最终看的只不过是我们的博客而已,代码什么的好像都无所谓。所以我也就不想说什么了。


PSP表

PSP2.1 Personal Software Process Stages 预估耗时(小时) 实际耗时(小时)
Planning 计划 1 1
· Estimate · 估计这个任务需要多少时间 20 20
· Analysis · 需求分析 (包括学习新技术) 1 3
· Design Spec · 生成设计文档 0.5 0.5
· Design Review · 设计复审 (和同事审核设计文档) 1 0.5
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 1 0.5
· Design · 具体设计 2 3
· Coding · 具体编码 2 4
· Code Review · 代码复审 2 1
· Test · 测试(自我测试,修改代码,提交修改) 2 1
·Reporting ·报告 1 1.5
· Test Report · 测试报告 2 2.5
· Size Measurement · 计算工作量 0.5 0.5
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 1 1

推荐阅读
  • WPF之Binding初探
      初学wpf,经常被Binding搞晕,以下记录写Binding的基础。首先,盗用张图。这图形象的说明了Binding的机理。对于Binding,意思是数据绑定,基本用法是:1、 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了基于c语言的mcs51单片机定时器计数器的应用教程,包括定时器的设置和计数方法,以及中断函数的使用。同时介绍了定时器应用的举例,包括定时器中断函数的编写和频率值的计算方法。主函数中设置了T0模式和T1计数的初值,并开启了T0和T1的中断,最后启动了CPU中断。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 本文介绍了一种划分和计数油田地块的方法。根据给定的条件,通过遍历和DFS算法,将符合条件的地块标记为不符合条件的地块,并进行计数。同时,还介绍了如何判断点是否在给定范围内的方法。 ... [详细]
  • 本文介绍了为什么要使用多进程处理TCP服务端,多进程的好处包括可靠性高和处理大量数据时速度快。然而,多进程不能共享进程空间,因此有一些变量不能共享。文章还提供了使用多进程实现TCP服务端的代码,并对代码进行了详细注释。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 判断编码是否可立即解码的程序及电话号码一致性判断程序
    本文介绍了两个编程题目,一个是判断编码是否可立即解码的程序,另一个是判断电话号码一致性的程序。对于第一个题目,给出一组二进制编码,判断是否存在一个编码是另一个编码的前缀,如果不存在则称为可立即解码的编码。对于第二个题目,给出一些电话号码,判断是否存在一个号码是另一个号码的前缀,如果不存在则说明这些号码是一致的。两个题目的解法类似,都使用了树的数据结构来实现。 ... [详细]
  • java程序设计试题_《Java语言程序设计》期末考试模拟试题——填空题和编程题...
    一、根据题意,填写出空格中的内容Java平台包括三个技术方向,其中J2ME代表____________、J2SE代表___________、J2EE代表 ... [详细]
  • 浅解XXE与Portswigger Web Sec
    XXE与PortswiggerWebSec​相关链接:​博客园​安全脉搏​FreeBuf​XML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ... [详细]
  • java布尔字段用is前缀_POJO类中布尔类型的变量都不要加is前缀详解
    前言对应阿里巴巴开发手册第一章的命名风格的第八条。【强制】POJO类中布尔类型的变量都不要加is前缀,否则部分框架解析会引起序列化错误。反例:定义为基本 ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
author-avatar
榴莲味蛋筒
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有