中小学生试卷自动生成程序--jialin大佬代码分析
结对编程代码评价
有幸和小jialin结对编程。拿到jialin的代码后。
我先是尝试用idea运行。结果报了如下错误。
无法加载主类,再尝试用eclipse运行。
好的,可以运行,那为什么用idea跑不了呢?
度娘了一下,发现是环境变量设置的问题。
接下来步入正题,开始看代码。
打开工程,发现在只有一个class文件,头大,这样的架构肯定不够好。一个一个函数看下来吧。
第一个函数是 CheckNameAndPassword()
,用于检测账号密码是否正确
boolean CheckNameAndPassword(User []user,User indata) {
for(int i=0;i<9;i++) {
if(indata.name.equals(user[i].name) && indata.password.equals(user[i].password)) {
indata.grade=user[i].grade;
return true;
}
}
return false;
}
可以看出来jialin大佬这里是把用户写死了的,先产生了满足需求的9个User,这样写的好处是执行的效率比较高,缺点是添加用户比较麻烦,要对代码进行改动。
接下来是TestDemo
,小jialin把所有的逻辑都写在了这里面。看第一段我发现了一个代码风格上的问题。代码如下:
if(xx!=0) indata=Login();
grade=ChooseGrade(indata);
xx=PaperProduce(indata.name,grade);
在符号如“=”两边最好空格一下,这样代码看起来会更清晰。改后的如下:
if(xx != 0) indata = Login();
grade = ChooseGrade(indata);
xx = PaperProduce(indata.name, grade);
改了之后是不是好看了一点点,继续往下看。
接下来分别是选择出题难度,保存试卷,产生试卷,产生题目,判断是否重复的函数。
重点看一下查重函数itemIsExist()
static boolean itemIsExist(String problem, String username,String grade) {
String file_path= "papers\\"+username+"\\"+grade;
File folder = new File(file_path);
String all = "";
File files[] = folder.listFiles();
for(File f : files) {
InputStream is = null;
try {
is = new FileInputStream(f);
} catch (FileNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
byte content[] = new byte[1024];
try {
is.read(content);
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
try {
is.close();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
try {
all += new String((content),"utf-8");
} catch (UnsupportedEncodingException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
if(all.indexOf(problem) == -1) {
return false;
}else {
return true;
}
}
可以看到每次查重都要去读文件。将已经产生的题目全部读出,再一一对比。每次读文件都会使用比较多的资源,我觉得可以把产生的题目先存入字符串组,新产生题目与字符串组内题目对比,若重复则重新产生一道,最后将整字符串组写入,这样可以减少读写文件带来的消耗。
jialin大佬的产生题目的逻辑写得很好,可以随机的产生符合需求的各种形式的题目,还可以给题目加上括号。同时防止了不合理括号产生。
接下来实际运行体验一下。
基本满足需求,试卷也成功产生了。接下来输入一些奇怪的东西测试一下程序的稳定性。
发现了一点不稳定的地方,当要求输入试卷数量时如果没有输入数字,随意输入一个字符串,程序就会终止。这是因为在该逻辑中使用了Scanne输入的nextInt(),当输入非整数时,会抛出类型不匹配的异常,可以在这里进行一下异常处理,当输入不为整数的时候要求重新输入。
总结
总体来看,jialin大佬代码很好的完成了题目的各项需求,只是在代码风格上还有一些地方可以提高,整个工程的架构也可以做的更好,一个class写到底的方式调试的时候实在是太不友善了,jialin大佬凭着清晰的逻辑能力完成了工程,但是我看起来的时候就有点头疼了。看了jialin的代码之后,再反思一下我自己写的,发现自己写的一些东西其实是有些多余的,命令提示也可以做的更友好一些,整个工程的耦合程度也可以进一步降低。
中小学生试卷自动生成程序--jialin大佬代码分析的更多相关文章
- ExtJS6的中sencha cmd中自动创建案例项目代码分析
在之前的博文中,我们按照sencha cmd的指点,在自己win7虚拟机上创建了一个案例项目,相当于创建了一个固定格式的文档目录结构,然后里面自动创建了一系列js代码.这是使用sencha cmd自动 ...
- 中小学数学卷子自动生成程序--对G同学的代码分析
前几天,在课程要求下完成了个人项目的项目工程编写,即一个中小学数学卷子自动生成程序. 程序主要功能是用户预设账户登录后可以选择等级进行对应的小中高的数学卷子对应出题生成txt文本. 本文针对partn ...
- EF自动生成的模型edmx代码分析
edmx代码分析 本文分析Entity Framework从数据库自动生成的模型文件代码(扩展名为edmx). 1. 概述 本文使用的数据库结构尽量简单,只有2个表,一个用户表和一个分公司表(相当于部 ...
- Demo005 小学四则运算自动生成程序
目录 小学四则运算自动生成程序 0.传送门 1.题目要求 2.功能实现 2.1 总体设计 2.2 用户欢迎界面 2.3 用户功能界面 2.4 屏幕输出 2.5 文本输出 2.6 获取时间 2.7 用户 ...
- Android代码分析工具lint学习
1 lint简介 1.1 概述 lint是随Android SDK自带的一个静态代码分析工具.它用来对Android工程的源文件进行检查,找出在正确性.安全.性能.可使用性.可访问性及国际化等方面可能 ...
- STM32启动代码分析 IAR 比较好
stm32启动代码分析 (2012-06-12 09:43:31) 转载▼ 最近开始使用ST的stm32w108芯片(也是一款zigbee芯片).开始看他的启动代码看的晕晕呼呼呼的. 还好在c ...
- 常用 Java 静态代码分析工具的分析与比较
常用 Java 静态代码分析工具的分析与比较 简介: 本文首先介绍了静态代码分析的基 本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBu ...
- [Asp.net 5] DependencyInjection项目代码分析4-微软的实现(3)
这个系列已经写了5篇,链接地址如下: [Asp.net 5] DependencyInjection项目代码分析 [Asp.net 5] DependencyInjection项目代码分析2-Auto ...
- JavaBean 基础概念、使用实例及代码分析
JavaBean 基础概念.使用实例及代码分析 JavaBean的概念 JavaBean是一种可重复使用的.且跨平台的软件组件. JavaBean可分为两种:一种是有用户界面的(有UI的):另一种是没 ...
随机推荐
- SpringBootSecurity学习(16)前后端分离版之 OAuth2.0 加密配置
示例代码的改进 前面使用spring cloud security和spring cloud oauth2写了一个第三方授权的例子,例子非常的简单,主要目的是用来熟悉OAuth2.0 申请授权的整个流 ...
- 品Spring:真没想到,三十步才能完成一个bean实例的创建
在容器启动快完成时,会把所有的单例bean进行实例化,也可以叫做预先实例化. 这样做的好处之一是,可以及早地发现问题,及早的抛出异常,及早地解决掉. 本文就来看下整个的实例化过程.其实还是比较繁琐的. ...
- kotlin -- 可见性修饰符
puiblic Kotlin的可见修饰符与Java类似,但是默认可见性不同,Java默认包私有,kotlin默认public ### internal internal 只在模块内部可见.一个模块就是 ...
- 整理一些大厂的开源平台及github,向他们看齐...
有人苦恼,该如何突破技术的局限性... 有人羡慕,技术上你怎么懂得这么多... 有人哀叹,唉,我已经学不动了... 我的总结(纯属个人想法):身处IT,就得不断学习和积累,才不会被狠狠地甩在身后.什么 ...
- vue常见问题随笔集
1.vuex操作对应关系 设置 触发/获取 action <-> dispatch mutations <-> commit getters <-> ...
- GLSL 参考GIMP源码实现色彩平衡调节
色彩平衡 修图工具中的色彩平衡一般用来根据亮度等级调整图片中颜色的偏色,调整偏色涉及到加色原理和减色原理 其实我们通过三原色加色原理的图片就可以知道,红色的对比色是青色,蓝色的对比色是黄色,绿色的对比 ...
- java零碎知识(每种数据类型默认值,多大,取值范围)
只要记下字节就好了 其它不必死记,取值范围:没有正负的,2的 字节数*8次方-1 , 凡是有正负的2的 (字节数*8)-1次方 -1 比如: 1.byte(有正负):先计算是2的几次方:字节数1*( ...
- webshell之一句话木马变形
什么是一句话木马 一句话木马就是只需要一行代码的木马,短短一行代码,就能做到和大马相当的功能.为了绕过waf的检测,一句话木马出现了无数中变形,但本质是不变的:木马的函数执行了我们发送的命令. 我们如 ...
- PMP涉及的几个工作系统
PMP涉及的几个工作系统 工作系统作为事业环境因素,提高或限制项目管理的灵活性,并可能对项目结果产生积极或消极影响,包括项目管理系统.项目管理信息系统PMIS.配置管理系统.变更控制系统.合同变更 ...
- 实用---GUI的搭建,windowbuilder的使用
在进行GUI的搭建过程中,相信很多人对于一个图标的设置感觉写起来很麻烦,需要不断的添加,而在java中有一个windowbuilder窗口可以很好的帮助我们进行GUI的搭建 1.进入eclipse的页 ...