ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

结对编程-队友代码分析

2022-09-13 23:34:01  阅读:214  来源: 互联网

标签:结对 String space int str1 编程 nextInt 队友 &&


 

通过一周的时间,我们完成了个人项目。我的代码是用c++编写的,我的队友罗军杰是用JAVA写的。在看完我的代码和罗军杰的代码后,发现各有优缺点。

项目需求简述:

项目名称:中小学数学卷子自动生成程序

用户:小学、初中和高中数学老师。

功能:

1、命令行输入用户名和密码,两者之间用空格隔开(程序预设小学、初中和高中各三个账号,具体见附表),如果用户名和密码都正确,将根据账户类型显示“当前选择为XX出题”,XX为小学、初中和高中三个选项中的一个。否则提示“请输入正确的用户名、密码”,重新输入用户名、密码;

2、登录后,系统提示“准备生成XX数学题目,请输入生成题目数量:”,XX为小学、初中和高中三个选项中的一个,用户输入所需出的卷子的题目数量,系统默认将根据账号类型进行出题。每道题目的操作数在1-5个之间,操作数取值范围为1-100;

3、题目数量的有效输入范围是“10-30”(含10,30),程序根据输入的题目数量生成符合小学、初中和高中难度的题目的卷子(具体要求见附表)。同一个老师的卷子中的题目不能与以前的已生成的卷子中的题目重复(以指定文件夹下存在的文件为准,见5);

4、在登录状态下,如果用户需要切换类型选项,命令行输入“切换为XX”,XX为小学、初中和高中三个选项中的一个,输入项不符合要求时,程序控制台提示“请输入小学、初中和高中三个选项中的一个”;输入正确后,显示“”系统提示“准备生成XX数学题目,请输入生成题目数量”,用户输入所需出的卷子的题目数量,系统新设置的类型进行出题;

5、生成的题目将以“年-月-日-时-分-秒.txt”的形式保存,每个账号一个文件夹。每道题目有题号,每题之间空一行;

队友的代码进行简要分析:

1.代码规范:在缩进方面,没有使用两个空格作为缩进,而是使用了4个空格作为缩进量;

2.代码层次:可以看出有两层,用户登录验证,试卷生成。大致思路为:1)userInit(),从txt文件中导入所有用户的信息,在和输入账户信息比对之后,进入试卷生成环节。2)getGrade()来获取试卷的难易程度。3)setPaper()开始生成试卷并保存到相应的存储位置。

3.代码可读性:从main函数我可以清楚的看出大致的思路,但是子函数的实现上,过长,导致代码的可读性较差,并且可延展性较差。当项目需求更换时,无法快速的更变功能。

       比如set_Question()函数:

        static String set_Question(int Grade){
String[] symbol=new String[]{"+","-","*","/","^2","√","sin","cos","tan"};//设置字符串数组保存符号
Random r = new Random();//产生随机数种子
String str1=new String();//产生的问题
if(Grade==1){//当状态为小学时
while(true){
str1="";
int length=0;//总长度
int bracket=r.nextInt(3);//括号数
int left=0;//多余的左括号
int space=0;//括号间距
while(true){
if(r.nextInt(2)==0&&bracket>0){
str1+="(";
bracket--;
left++;
space=0;
}//随机加入左括号
int num=r.nextInt(100)+1;
str1+=String.valueOf(num);
space++;
if(r.nextInt(2)==0&&left>0&&space>=2){
// if(left>0&&space>=2){
str1+=")";
left--;
}//随机加入右括号
if(length>=2&&bracket<=0&&left<=0){
break;
}
str1+=symbol[r.nextInt(4)];
length++;
}//加入符号
if(length<5&&space<3){
break;
}//错误的问题产生
}
}
if(Grade==2){
while (true){
str1="";
int length=0;
int sym=r.nextInt(2)+1;
int bracket=r.nextInt(2);
int left=0;
int space=0;
while (true){
if(r.nextInt(2)==0&&bracket>0){
str1+="(";
bracket--;
left++;
space=0;
}
space++;
int num=r.nextInt(100)+1;
if(r.nextInt(2)==0){
if(r.nextInt(2)==0){
str1+=(String.valueOf(num)+symbol[4]);
}else{
str1+=(symbol[5]+String.valueOf(num));
}//随机加入平方或根号
sym--;
}else{
str1+=String.valueOf(num);
}
if(r.nextInt(2)==0&&left>0&&space>=2){
str1+=")";
left--;
}
if(length>=2&&sym<=0&&bracket<=0&&left<=0){
break;
}
str1+=symbol[r.nextInt(4)];
length++;
}
if(length<5&&space<5){
break;
}
}
}
if(Grade==3){
while(true){
str1="";
int length=0;
int sym=1;
int sym2=r.nextInt(3)+1;
int bracket=r.nextInt(3);
int left=0;
int space=0;
while (true){
if(r.nextInt(2)==0&&bracket>0){
str1+="(";
bracket--;
left++;
space=0;
}
space++;
int num=r.nextInt(100)+1;
if(r.nextInt(3)==0){
if(r.nextInt(2)==0){
str1+=(String.valueOf(num)+symbol[4]);
}else{
str1+=(symbol[5]+String.valueOf(num));
}
sym--;
}else {
if(r.nextInt(2)==0){
int symloc=r.nextInt(3)+6;
str1+=(symbol[symloc]+String.valueOf(num));
sym2--;
}else {
str1+=String.valueOf(num);
}
}
if(r.nextInt(2)==0&&left>0&&space>=2){
str1+=")";
left--;
}
if(length>=2&&sym<=0&&sym2<=0&&bracket<=0&&left<=0){
break;
}
str1+=symbol[r.nextInt(4)];
length++;
}
if(length<5&&space<5){
break;
}
}
}
str1+="=";
return str1;
}

 整个函数有130行,过长,可以将函数再拆分成几个函数,提高代码的可读性,提高代码的可拓展性。思路可以是:将三个难度的出题函数,简化成一个,通过传入的参数来判断出什么难度的题目。

4.随机生成题目函数:我的代码没有在出题的时候添加括号,但是我的队友的代码实现了添加括号的功能。相较于我的代码更加完善。

5.交互界面:交互界面过于简单,可以稍微美化一下。

 

标签:结对,String,space,int,str1,编程,nextInt,队友,&&
来源: https://www.cnblogs.com/linyangkai/p/16691332.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有