结对编程代码评价
有幸和小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的代码之后,再反思一下我自己写的,发现自己写的一些东西其实是有些多余的,命令提示也可以做的更友好一些,整个工程的耦合程度也可以进一步降低。
原文地址:https://www.cnblogs.com/Hnufsh/p/11549981.html