此次的个人项目,队友和我均使用了 Java 语言进行编写。当然每个人的思想都是不一样的,所以代码也不同。在实现相同功能的情况下,通过分析队友的代码,期望能够发现我的不足,也期望可以帮助队友进行代码改进。
于是自然,便先从缺点开始写起了。
1,逻辑判断重复
在部分逻辑判断中,有许多代码重复,导致计算机需要进行多余的判断。就比如该代码中针对输入的用户名和密码进行核对的判断函数 UserRight:
1 static boolean UserRight(String user, int psd) {//针对输入的用户名和密码进行核对 2 if(user.equals("张三1") && psd == 123) { 3 pri=1; 4 System.out.println("当前选择为"+pri_ch+"出题"); 5 return true; 6 } 7 else if(user.equals("张三2") && psd == 123) { 8 pri=1; 9 System.out.println("当前选择为"+pri_ch+"出题"); 10 return true; 11 } 12 else if(user.equals("张三3") && psd == 123) { 13 pri=1; 14 System.out.println("当前选择为"+pri_ch+"出题"); 15 return true; 16 } 17 else if(user.equals("李四1") && psd == 123) { 18 jun=1; 19 ...
我觉得可以先对密码是否为123进行判断,再判断用户名,尽量减少程序进行判断的次数:
1 static boolean UserRight(String user, int psd) {//针对输入的用户名和密码进行核对 2 if (psd != 123) { 3 return false; 4 } 5 else if(user.equals("张三1") || user.equals("张三2") || user.equals("张三3")) { 6 pri = 1; 7 System.out.println("当前选择为" + pri_ch + "出题"); 8 return true; 9 } 10 else if(user.equals("李四1") || ...) { 11 jun = 1; 12 ...
2,变量设置冗余
例如该代码中通过 pri, jun, sen 来分别表示是否应该出小学、初中、高中的题目:
1 public static int pri=0,jun=0,sen=0;
我觉得可以只设置一个变量,然后通过该变量不同的值来表示当前的状态。如此可以增加可读性,同时也可以精简部分代码,减少内存占用(虽说可能微不足道,但即使是1kB的内存空间如果能节省也是要节省的):
1 public static int status = 0;//默认为0,代表小学难度。1代表初中难度,2代表高中难度
3,部分函数设置无必要
就如其中生成符号的一些函数,如果这样生成,完全可以在相应位置通过字符串拼接实现,没有必要设置另外的函数:
1 static String Getbrackl() {//生成左括号 2 String brackl = "("; 3 return brackl; 4 }
4,频繁地对文件进行读写
代码并不是一次性生成算式再写入文件中,而是每生成一个部分就进行一次文件的读写。而磁盘速度是显著慢于 CPU 速度的,频繁进行磁盘读写操作会极大降低程序运行速度:
1 if(j==temp-1) { //最后一个操作数后加上等于号结尾 2 f2.write(Getbrackl()); 3 f2.write(GetValue()); 4 f2.write(GetSqu()); 5 f2.write(Getbrackr()); 6 f2.write("="); 7 }...
所以我认为先在程序中设立字符串,再将字符串写入文件中可能会更好一点:
1 if(j == temp - 1) { //最后一个操作数后加上等于号结尾 2 String tmp = Getbrackl() + GetValue() + GetSqu() + Getbrackr() + "="; 3 f2.write(tmp); 4 }...
5,命名问题
代码中有点变量使用了驼峰命名法,有的又使用了匈牙利命名法,有的则命名不严谨。希望可以采用统一的命名方法,在 Java 中我推荐使用驼峰命名法,这也是 Java 语言发明时所使用的命名法。
6,间隔问题?
我建议符号与数字以及字母之间应该空一格,当然这只是我个人的编写习惯,倒也无关紧要。不过在阅读并试图理解大量代码时,这一个空格的盈余能让眼睛舒服不少。
缺点说完了,那么是时候谈谈优点了。
1,代码可读性较高
注释较为完善,如之前的代码示例所示,注释是比较完善的,便于其他人的阅读和理解。其次缩进规范,书写整齐,这些都增加了代码可读性。
2,使用了 Java 的异常处理机制来避免程序出错
在限制用户输入的题目数量时,使用了 Java 的异常处理机制,可谓十分巧妙:
1 while(true) {//对于生成题目数量进行控制,只有10~30时不会弹出重新输入 2 try { 3 num = in.nextInt(); 4 if(num<10 || num>30) { 5 throw new Exception(); 6 } 7 }catch(Exception e) {//超出数量,让用户重新输入 8 System.out.println("请重新输入生成题目数量:(10~30)"); 9 continue; 10 } 11 break; 12 }
因为受队友所托,便仔细分析了她的代码。前后两小时有余,写下这篇随笔,希望能对其有所裨益。
以上。