结对编程队友的个人项目代码分析

他的代码是用java在eclipse中编写的,基本实现了老师所要求的功能先说一下优点,优点就是代码精简,一百三十行完成,与我自己的代码相比,尤其是在生成题目的函数上,无疑更加精简并且算法巧妙,其函数只用一个n作为参数用来调控三种不同难度的题目转换,但精简的部分缺点就是生成题目方式比较单一,比如在括号的应用上,无法生成对整个括号进行乘方开方的题目。综合来说其整篇代码都是这种高效的风格,其中思路让我这种脑子不好且水平不高的人有所受益,但他的代码缺点也很明显,写代码的习惯有些差,比较杂乱且没有注释,通篇只有主类,用户信息等也是直接用string保存,感觉如果要更改需求或者升级等,改动代码的成本会很高,测试之后有一个问题就是在TxT中无法进行换行,(经过查询发现是TxT无法识别“\n\n”标识符)

总的来说还不错。(相比我后来发现自己的代码bug百出,是不错了)

//目标文件夹为桌面上的test文件夹,运行之前请在桌面上新建一个名为test的文件夹
package first;
import java.util.*;
import java.io.*;
import java.text.SimpleDateFormat;
public class CreatProblem {
public static String[] operator= {"+","-","*","/","^2","^0.5","sin","cos","tan"};
public static String[][] Users= {{"张三1","123","小学"},{"张三2","123","小学"},{"张三3","123","小学"},
{"李四1","123","初中"},{"李四2","123","初中"},{"李四3","123","初中"},
{"王五1","123","高中"},{"王五2","123","高中"},{"王五3","123","高中"}};
public static String GetProblem(int n) {
String str="";
boolean isBrackets;
int Brackets=0;
int x;
int Operand=(int)(Math.random()*4)+2;
for(int a=0;a<Operand;a++) {
x=(int)(Math.random()*2);
if((x==1)&(a<Operand-1)&(a>0)) {
Brackets++;
str=str+‘(‘;
isBrackets=true;
}
else isBrackets=false;
x=(int)(Math.random()*4+n);
if((x>5)&(x<9)) str=str+operator[x];
str=str+String.valueOf((int)(Math.random()*101));
x=(int)(Math.random()*4+n);
if((x>3)&(x<6)) str=str+operator[x];
x=(int)(Math.random()*2);
if((x==1)&(Brackets>0)&(isBrackets=false)) {
str=str+‘)‘;
Brackets--;
}
if(a<Operand-1) str=str+operator[(int)(Math.random()*4)];
else for(int t=0;t<Brackets;t++) {
str=str+‘)‘;
}
}
return str;
}
public static void GetTestPaper(String Name,int num,int level) {
Date getDate=Calendar.getInstance().getTime();
String Path=new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(getDate);
Path="C:\\Users\\asus\\Desktop\\test\\"+Name+"\\"+Path+".txt";
File file=new File(Path);
File fileParent=file.getParentFile();
if(!fileParent.exists()) fileParent.mkdirs();
try {
if(!file.exists()) file.createNewFile();
FileWriter fw=new FileWriter(file);
for(int a=0;a<num;a++) {
fw.write(GetProblem(level)+"\n\n");
fw.flush();
}
fw.close();
}catch(IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
System.out.println("请输入用户名和密码,中间用空格隔开:");
int level=0;
String name;
String password;
Circle:
while(true) {
name=sc.next();
password=sc.next();
for(int a=0;a<9;a++) {
if((Users[a][0].equals(name)==true)&(Users[a][1].equals(password)==true)) break Circle;
if(a==8) System.out.println("请输入正确的用户名和密码,中间用空格隔开:");
}
}
switch(name) {
case "张三1":name="zhangsan1";
level=0;
break;
case "张三2":name="zhangsan2";
level=0;
break;
case "张三3":name="zhangsan3";
level=0;
break;
case "李四1":name="lisi1";
level=2;
break;
case "李四2":name="lisi2";
level=2;
break;
case "李四3":name="lisi3";
level=2;
break;
case "王五1":name="wangwu1";
level=5;
break;
case "王五2":name="wangwu2";
level=5;
break;
case "王五3":name="wangwu3";
level=5;
break;
}
while(true) {
System.out.println("准备生成"+Users[level+1][2]+"题目,继续请输入‘y’,否则请输入需要的出题类型(小学、初中、高中):");
String choise=sc.next();
if(choise.equals("y")==true) {
System.out.println("请输入出题数量:");
int num=sc.nextInt();
GetTestPaper(name,num,level);
}
else {
switch(choise) {
case "小学":level=0;
break;
case "初中":level=2;
break;
case "高中":level=5;
break;
default:System.out.println("错误输入,请注意格式;");
}
}
}
}

}

原文地址:https://www.cnblogs.com/fyq-kylin/p/9716183.html

时间: 2024-10-02 21:26:14

结对编程队友的个人项目代码分析的相关文章

结对编程-OR &amp; Creddit对个人项目代码的复用与扩展

项目题目: 用户: 小学.初中和高中学生. 功能: 1.用户注册功能.用户提供手机号码,点击注册将收到一个注册码,用户可使用该注册码完成注册: 2.用户完成注册后,界面提示设置密码,用户输入两次密码匹配后设置密码成功.密码6-10位,必须含大小写字母和数字.用户在登录状态下可修改密码,输入正确的原密码,再输入两次相同的新密码后修改密码成功: 3.密码设置成功后,跳转到选择界面,界面显示小学.初中和高中三个选项,用户点击其中之一后,提示用户输入需要生成的题目数量: 4.用户输入题目数量后,生成一张

[Asp.net 5] DependencyInjection项目代码分析4-微软的实现(3)

这个系列已经写了5篇,链接地址如下: [Asp.net 5] DependencyInjection项目代码分析 [Asp.net 5] DependencyInjection项目代码分析2-Autofac [Asp.net 5] DependencyInjection项目代码分析3-Ninject [Asp.net 5] DependencyInjection项目代码分析4-微软的实现(1) [Asp.net 5] DependencyInjection项目代码分析4-微软的实现(2) 如果想

[Asp.net 5] DependencyInjection项目代码分析4-微软的实现(5)(IEnumerable&lt;&gt;补充)

Asp.net 5的依赖注入注入系列可以参考链接: [Asp.net 5] DependencyInjection项目代码分析-目录 我们在之前讲微软的实现时,对于OpenIEnumerableService与ClosedIEnumerableService抛下没讲,现在我们就将该部分补充完整. 我们回忆ServiceProvider类的构造函数(对外部使用的)中,注册了IEnumerable<>.new OpenIEnumerableService(_table)的关系. public Se

[Asp.net 5] DependencyInjection项目代码分析4-微软的实现(中)

在 DependencyInjection项目代码分析4-微软的实现(上)中介绍了“ServiceTable”.“ServiceEntry”.“IGenericService”.“IService”.“IServiceCallSite”,这篇介绍下“IGenericService."IService"."IServiceCallSite"实现类 GenericService类 做为IGenericService的唯一实现类,该类言简意赅,请看代码: internal

[Asp.net 5] DependencyInjection项目代码分析-目录

微软DI文章系列如下所示: [Asp.net 5] DependencyInjection项目代码分析 [Asp.net 5] DependencyInjection项目代码分析2-Autofac [Asp.net 5] DependencyInjection项目代码分析3-Ninject [Asp.net 5] DependencyInjection项目代码分析4-微软的实现(1) [Asp.net 5] DependencyInjection项目代码分析4-微软的实现(2) [Asp.net

[Asp.net 5] DependencyInjection项目代码分析4-微软的实现(4)

这个系列已经写了6篇,链接地址如下: [Asp.net 5] DependencyInjection项目代码分析 [Asp.net 5] DependencyInjection项目代码分析2-Autofac [Asp.net 5] DependencyInjection项目代码分析3-Ninject [Asp.net 5] DependencyInjection项目代码分析4-微软的实现(1) [Asp.net 5] DependencyInjection项目代码分析4-微软的实现(2) [As

结对队友个人项目代码分析

项目要求 项目名称:中小学数学卷子自动生成程序 用户: 小学.初中和高中数学老师. 功能: 1.命令行输入用户名和密码,两者之间用空格隔开(程序预设小学.初中和高中各三个账号,具体见附表),如果用户名和密码都正确,将根据账户类型显示"当前选择为XX出题",XX为小学.初中和高中三个选项中的一个.否则提示"请输入正确的用户名.密码",重新输入用户名.密码: 2.登录后,系统提示"准备生成XX数学题目,请输入生成题目数量:",XX为小学.初中和高中三

结对编程队友代码分析

这次结对编程的队友是可熊,感谢可熊不嫌弃我这个鶸,,和我组队 通过分析可熊的代码,深刻体会到了自己代码的不规范以及代码可延展性的缺失 比如using namespace std; ,这一行代码虽然自己写的时候很方便,但没有考虑到别人的编程习惯,某些工程代码里会出现以关键字做变量名的情况,这样写会不兼容 所以要用cin,cout作为标准输入输出应该如下面代码: int x; std::cin >> x ; std::cout << x << std::endl; 或者像这

结对编程队友个人项目分析

队友代码分析: 优点: 1:首先在函数中对账号进行了判断 具有良好的扩展性,也方便之后的功能里面增加新的账号,并且进行了注释 2.结构的逻辑性良好,根据不同的年级,通过if语句能够跳转到对应的模块进行输出 3.代码简洁明了,方便阅读以及理解代码的功能实现 4.变量命名规,具有良好可读性 5.在对输入判断这方面,提示的很好 缺点: 1.对账号密码判断位于一行,影响了代码的可读性 2.在生成出题文件这块,没有注释具体生成的文件的位置,影响后续的测试,并且在文件名字上,没有按照需求中所给的名字进行文件