首页 > 编程语言 >【HNU个人项目互评】--java

【HNU个人项目互评】--java

时间:2023-09-20 12:56:43浏览次数:34  
标签:同学 java -- 代码 互评 出题 separator File 题目

湖南大学软件工程个人项目互评

评测者:李姝萱 项目作者:张乐盈

 

一.基本信息:

  1.被评队友满足了个人项目要求的所有需求     1.1.登录:只有规定的账户可以登陆,其他的输入不会因为异常抛出强制终止程序

 输入不满足格式要求,不会越界异常

错误账户不能登陆

登陆成功,清晰提示

    1.2.生成题目:小学包括+-*/();中学每一道题都包含平方或者开平方根;高中每一道题都含有三角函数,且题目经过了查重处理

    1.3.设置题目的数量以及各题目的操作数大小都符合要求

          

生成的小初高对应的题目

    1.4.登录之后可以随时切换出题的状态,且不会扔出异常

状态随心切换,没有异常终止程序

    1.5.输入合法数字可以正常出题,-1可以退出登录,非法的其他信息会输出引导语句

通过各种测试

    1.6.生成的文件可以正常输出,而且命名按照题目要求形式,“年-月-日-时-分-秒.txt”

时间完全一致

2.根据Google编写java代码规范,队友的代码严格遵守规范,在变量,方法等的命名上,以及水平,垂直空白,缩进,javadoc等方面都严格按照标准

 

二.优点评价分析:

1.虽然题目的用户数量比较少,但是张同学仍然采用的是读取文件的形式,而不是直接加入客户的信息,这样做的好处是使得对用户的读取操作更具有拓展性,因为如果用户数量比较多,或者需要加入更多的用户,如果直接在程序端进行添加会显得代码比较臃肿,而且从安全性来说文件也更好。

public void getUserList() {
  ArrayList<String> uList = new ArrayList<>();
  uList = sysFileAssistant.readFromFile();
  for (int i = 0; i < uList.size(); i++) {
    String[] result = uList.get(i).split("\s");
    User u1 = new User(result[0], result[1], result[2]);
    userList.add(u1);
  }
}

得到用户

2.队友的另一个优点就是她的模块划分比较合理,逻辑清晰,代码的可读性也比较好,可以看到张同学在编写代码之前做了一定且充分的构思。

各模块划分清晰

3.队友在生成表达式的地方对出用到了如下的判断表达

random.nextInt(0,(oNum - pos + 1) + usedNum) == 0

这个表达本来处理的是初中高中的平方,开平方,以及三角函数的问题,但是他在处理这些必须处理的问题的同时解决掉了另一个需求,那就是对于初中生每道题至少出现一次平方或者开根号,对于高中生至少出现一次三角函数。

首先给出各个符号的含义:oNum表示的是操作数的数目,pos表示当前处理的操作数的位,usedNum表示已经处理上平方或者开平方的次数。
因为这里如果usedNum出现的次数为0(前面所有数字都没有规定符号)的话,这个随机数就只能生成随机数0了,这样子就必须执行为0的操作,加上必要的平方或者开根号了。而且从出发点来说他又可以随机设置这里到底添加不添加平方之类的符号,所以我觉得这里处理比较巧妙,值得思考学习。

具体生成模块如下(以中学示例):

中学模块解决至少一个中学类数学符号方法

 


总体来说,张同学在生成题目功能模块做得很好,生成的题目类型全面,随机性也很强。

 

三.缺点及改进建议:

1.张同学的一个缺点就是他必须要提前设置好所有的用户的文件夹来保存他们出的题目,但是这里要考虑如果脱离题目,用户数量比较大的情况下,我们就需手动创建很多文件夹,而且有些用户即使存在但是从来也不出题,这样子也会占据资源。
所以我给出的建议是可以在代码中进行文件夹的创建,如果该文件夹不存在,则自动创建,如果存在,就跳过创建文件夹。这样子就可以解决掉上面的资源占用和人力开销的问题。

类似如下:

private static void createAccountFolder(String folderPath) {
  File folder = new File(folderPath);
  if (!folder.exists()) {
     folder.mkdir();
  }
}

 

2.另一个建议就是张同学编写的关于切换出题模式部分的需求时,进行的操作是修改老师的type属性,通过查看张同学关于用户的类的代码,发现有账号,密码和类型3个属性,我个人觉得这里老师虽然可以切换不同模式出题,但是老师的身份应该保持不变,也就是在用户类中再加入一个字段“出题类型”这样子修改的时候应该针对的是老师的出题类型字段,这样后续如果需要拓展,需求增加,将老师类型和出题类型界分开,三个字段就可能需要修改了,所以我从程序的可拓展性建议四个字段,但是就本题来说这么做是完全没关系的。

切换类型

3.对于生成文件的格式,张同学处理的方式如下:

String fileName =
        dateTime.getYear() + "-" + dateTime.getMonthValue() + "-" + dateTime.getDayOfMonth() + "-"
            + dateTime.getHour() + "-" + dateTime.getMinute() + "-" + dateTime.getSecond()
            + ".txt";

这样子显得代码比较冗长,其实可以采用下面的方法来优化:

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
String dateStr = dateFormat.format(new Date());
return dateStr + ".txt";

 

四.我的收获和思考:

1.因为张同学出题逻辑严密以及题目类型多样全面,就不可避免时间复杂度比较高,对于生成大量的题目的需求来说就不太友好了,效率会有所损耗。
虽然这可以通过一些其他的数据结构来化简时间复杂度,但是这样子就没有办法做到张同学出题全面严谨的优点,比如我使用了linkedhashset数据结构,在去重上时间复杂度较低,但是随之而来的问题是我的出题逻辑没有张同学严谨全面,所以我觉得在实际这一点要根据具体的需求来分析到底采用哪种办法。

2.通过审阅队友的代码,我既发现了一些自己的问题,也学习了队友的一些做得很好的地方以及比较好的方法,比如可以直接调用File.separator来得到文件的分隔符,在我的代码里面直接用的是针对Windows的操作系统的分隔符,但是File.separator的好处是可以保证代码在不同平台上的兼容性,而不需要手动编写特定于操作系统的文件路径分隔符。
用法举例:

String filePath = "C:" + File.separator + "Users" + File.separator + "Username" + File.separator + "Documents" + File.separator + "file.txt";

 

总之,通过本次互评让我们彼此认识到自己的不足,也互相学习了对方的可取之处,受益匪浅。❤

 

 

 

 

 

 

 

 

 

 

标签:同学,java,--,代码,互评,出题,separator,File,题目
From: https://www.cnblogs.com/su913san03/p/17717040.html

相关文章

  • Transformer的上下文学习能力是哪来的?
    前言 有理论基础,我们就可以进行深度优化了。本文转载自机器之心仅用于学术分享,若侵权请联系删除欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读、CV招聘信息。CV各大方向专栏与各个部署框架最全教程整理【CV技术指南】CV全栈指导班、基础......
  • 对队员个人项目的简评
    话不多说直接进入代码,下面附上队员.cpp的代码:#include"implement.h"intmain(){stringstr1;while(1){system("cls");My_Login();here:Create_test();cout<<"==============================================================......
  • QOJ61 Cut Cut Cut! 题解
    题面。题解假设\(1\)号点有\(d\)条出边,给\(d\)条出边赋\(d\)个独立的单位向量,接下来,每个出边记作入边的随机线性组合,那么对于第\(i\)个点,答案就是入边生成的线性空间的秩。正确性证明:对于每个点考虑,假设现在考虑\(i\)号点,将其入边集合记作\(E1_{i}\),出边集合记......
  • 个人项目——论文查重
    作业GitHub链接:GitHub链接作业要求这个作业属于哪个课程工程概论这个作业要求在哪里个人项目这个作业的目标学习查重相关算法,熟悉项目设计过程项目需求题目:论文查重描述如下:设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论......
  • 方法初学习
    方法学习方法的定义及调用设计原则,一个方法只能有一个功能//自定义方法修饰符+返回值类型/*void是不返回,如int返回数字,需要用return来输出返回值*/+自定义方法名称,或调用Java本来就有的名称+(参数//可不注释){}加法自定义备注:方法包含与类与对象中可将我们自己写的代码作......
  • 图注意网络(GAT)的可视化实现详解
    前言 能够可视化的查看对于理解图神经网络(gnn)越来越重要,所以这篇文章将介绍传统GNN层的实现,然后展示ICLR论文“图注意力网络”中对传统GNN层的改进。本文转载自DeepHubIMBA作者:DavidWiner仅用于学术分享,若侵权请联系删除欢迎关注公众号CV技术指南,专注于计算机视觉的技术......
  • 销售出库单增加二开审核插件
    【目录】1、 扩展销售出库单,标识规范2、 创建审核服务插件,编写审核逻辑3、 审核操作注册服务插件4、 签入元数据和代码  【详细操作】1、 引入销售出库单,扩展销售出库单,标识规范      2、 创建审核服务插件,编写审核逻辑  将类改成公......
  • The 2023 ICPC Asia Regionals Online Contest (1)
    Preface这场打的还行,因为学长们都没发挥好被我们队偷了,但感觉发挥的也一般前期开题顺序有点问题导致罚时很高,不过中期写题还是很顺的基本都是一遍过只不过在3h的时候过完F到达8题后就开始坐牢了,虽然这场有两个字符串但徐神把H想复杂了,B可以说前面的建SAM和反串的AC自动机都想到......
  • 末流院校24届秋招逆袭之路!
    几年前,我在看新三国时,有一段记忆深刻的话,司马懿获胜之后说:“我挥剑只有一次,却磨了十几年”。但万万没想到的是,这句话在几年后的今天,在我的徒弟身上应验了。事情是这样的,我徒弟是今年24届的学生,他在今年7.4号找到我,说自己马上就要秋招找工作了,但现在技术还没学好,并发编程、JVM......
  • 如何与QVC 建立EDI连接?
    QVC,全称为Quality,Value,Convenience(品质、价值、便利),成立于1986年,是一家全球领先的零售电视和在线零售商。作为一家多渠道零售商,QVC致力于为客户提供高品质、独特的商品,通过电视、互联网和移动平台传播销售。QVC的使命是通过创新、创造性和独特的购物体验,为全球消费者带来愉悦......