A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© FFF   /  2014-1-1 09:14  /  4754 人查看  /  39 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

776699 发表于 2014-1-1 17:22
敬爱的楼主,8#和14楼和我的没有什么区别,都是用switch case,语句优化if else, 他们的都加技术分一分 ...

噢,map 优化原来比较好啊,谢谢楼主的提示啊,新年快乐哦

点评

FFF
switch要判断太多次了。Map可以少判断一些。  发表于 2014-1-1 19:08
回复 使用道具 举报
本帖最后由 刘旭升 于 2014-1-1 19:24 编辑

下午去图书馆,写好没能及时传上来,真悲剧。和楼上的有点像是了,但是我还没有看集合、、、所以就试用的很简单的方法了。。。
  1. import java.util.Scanner;
  2. /*
  3. 优化:
  4. 200
  5. 400  404  409  460        461~~465   471~488种情况;
  6. 原始:if else 格式。
  7. 准备使用字符窜解决。
  8.         第一步:把"情况代号"封装起来;
  9.                         使用数组封装,取角标值。//  int[]
  10.         第二布:把"情况"进行封装。
  11.                         字符窜数组,仅当角标一致时条件成立,调用成功。// String[];
  12. */
  13. public class optimize {
  14.         public static void main(String[] args){
  15.                 int[] option=new int[]{200,400,404,409,460,461,462,463, 464,465,471,472,474,475,476,477,479,480,481,482,483,484,485,486,487,488};
  16.                 String[] action=new String[]{"请求成功","错误的请求","没有找到访问页","登录冲突,请刷新页面再登录","请刷新页面再登录", "请刷新页面再登录","请刷新页面再登录","无效的查询参数", "缺失数据", "访问错误次数较多,请 + b.statusMsg + 分钟后再登录!", "无效的用户名" ,"未找到用户名或密码不正确","验证码不正确","用户未登录系统","无效的加密锁","密码不正确", "参数类型错误" ,   "参数错误" ,"已登录系统", "无效的跨域请求" ,"请使用加密锁登录", "用户状态未激活","活跃的用户","无效的用户","无效的用户", " 您的账户已锁定,请与管理员联系!"};
  17.                 Scanner reader=new Scanner(System.in);
  18.                 System.out.println("请输入序列号:");
  19.                 int a=reader.nextInt();boolean flag=true;//取得控制台的输入
  20.                 for(int i=0;i<option.length;i++)
  21.                         if(a==option[i]){
  22.                                 System.out.println(action[i]);//对准角标,实现打印。
  23.                                 flag=false;//用于控制 不正常状态下的情况。
  24.                                 }
  25.                 while(flag){
  26.                         System.out.println("未知错误,没有找到相关错误参数");
  27.                         return;
  28.                         }
  29.                 return;
  30.         }
  31. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 努力了!不一定成功,但一定有分!..

查看全部评分

回复 使用道具 举报
Class_焱 发表于 2014-1-1 17:23
TreeMap   可以排序

TreeMap可以按key自然排序,打印出来会好看一些,呵呵…
好多人后来都想到一起了,还可以更加优化
回复 使用道具 举报
第三次优化,用Properties工具类。Properties的本质是一个Map,所以基本思路一致,但用Properties更加灵活,可以在配置文件中修改状态码和状态信息。代码如下:
  1. private String loginResult3(int a){
  2.                 String message="";
  3.                 //业务逻辑
  4.                 try {
  5.                        
  6.                         Properties prop=new Properties();
  7.                         InputStream in=OptimizeIf.class.getClassLoader().getResourceAsStream("status.xml");
  8.                         prop.loadFromXML(in);
  9.                         message=prop.getProperty(String.valueOf(a));
  10.                        
  11.                 } catch (Exception e) {
  12.                         e.printStackTrace();
  13.                 }
  14.                 //测试
  15.                 System.out.println(message);
  16.                 return message;
  17.         }
复制代码
配置文件:
  1. <?xml version="1.0" encoding="utf-8" standalone="no"?>
  2. <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
  3. <properties>
  4. <entry key="479">参数类型错误</entry>
  5. <entry key="477">密码不正确</entry>
  6. <entry key="476">无效的加密锁</entry>
  7. <entry key="475">用户未登录系统</entry>
  8. <entry key="474">验证码不正确</entry>
  9. <entry key="472">未找到用户名或密码不正确</entry>
  10. <entry key="487">无效的用户</entry>
  11. <entry key="486">无效的用户</entry>
  12. <entry key="471">无效的用户名</entry>
  13. <entry key="484">用户状态未激活</entry>
  14. <entry key="483">请使用加密锁登录</entry>
  15. <entry key="482">无效的跨域请求</entry>
  16. <entry key="481">已登录系统</entry>
  17. <entry key="480">参数错误</entry>
  18. <entry key="409">登录冲突,请刷新页面再登录</entry>
  19. <entry key="485">活跃的用户</entry>
  20. <entry key="200">请求成功</entry>
  21. <entry key="404">没有找到访问页</entry>
  22. <entry key="465">访问错误次数较多,请5分钟后再登录!</entry>
  23. <entry key="464">缺失数据</entry>
  24. <entry key="463">无效的查询参数</entry>
  25. <entry key="400">错误的请求</entry>
  26. <entry key="462">请刷新页面再登录</entry>
  27. <entry key="488 ">您的账户已锁定,请与管理员联系!</entry>
  28. <entry key="461">请刷新页面再登录</entry>
  29. <entry key="460">请刷新页面再登录</entry>
  30. </properties>
复制代码




评分

参与人数 1技术分 +2 收起 理由
FFF + 2 完成很好、加油!

查看全部评分

回复 使用道具 举报
刘旭升 发表于 2014-1-1 19:20
下午去图书馆,写好没能及时传上来,真悲剧。和楼上的有点像是了,但是我还没有看集合、、、所以就试用的很 ...

思路很好,但效率没有HashMap高,因为用数组需要遍历数组,而HashMap则用了Hash算法,查找起来要快。
回复 使用道具 举报
本帖最后由 zzmxhm 于 2014-1-1 21:35 编辑
任亚俊 发表于 2014-1-1 20:20
第三次优化,用Properties工具类。Properties的本质是一个Map,所以基本思路一致,但用Properties更加灵活 ...

太赞了~ 如果把 Map 或 Properties 的生成和处理业务逻辑的函数分开可能会更好,这样只要生成一次
回复 使用道具 举报
本帖最后由 刘旭升 于 2014-1-1 21:44 编辑
任亚俊 发表于 2014-1-1 20:33
思路很好,但效率没有HashMap高,因为用数组需要遍历数组,而HashMap则用了Hash算法,查找起来要快。 ...

集合我还没看,所以你说的我不太清楚。Hash还没有接触,不晓得内部处理的代码,不过数组有好处,也有坏处。遍历费事是不是就是其中的一个缺点呢?这题的优化,是优化代码的长度,和计算次数。但两者兼顾得需要更多的测试和研究。。。不过你还是挺厉害的
回复 使用道具 举报
return a==200?"请求成功":a==400?"错误的请求":a==404?"没有找到访问页":a == 409?"登录冲突,请刷新页面再登录":a == 460?"请刷新页面再登录":"It's enough。";
回复 使用道具 举报
新年快乐
回复 使用道具 举报
:P我要试试!!
回复 使用道具 举报
本帖最后由 黑马IT学员 于 2014-1-3 18:45 编辑

这道题,用if else 显得特别乱,不明了,用switch case看起来就显得结构非常清晰
switch(i){
     case 200:
          return "请求成功";
          break;
           .
           .
           .
           .
        case 485:
         return "活跃的用户";
         break;
     case 488:
         return "您的账户已锁定,请与管理员联系!";
         break;
     default:
         return "未知错误,没有找到相关错误参数";
         break;
}
回复 使用道具 举报
这样行不行呢?
  1. switch (a) {
  2.                 case 200:
  3.                         return "请求成功";
  4.                 case 400:
  5.                         return "错误的请求";
  6.                 case 404:
  7.                         return "没有找到访问页";
  8.                 case 409:
  9.                         return "登录冲突,请刷新页面再登录";
  10.                 case 460:
  11.                         return "请刷新页面再登录";
  12.                 case 461:
  13.                         return "请刷新页面再登录";
  14.                 case 462:
  15.                         return "请刷新页面再登录";
  16.                 case 463:
  17.                         return "无效的查询参数";
  18.                 case 464:
  19.                         return "缺失数据";
  20.                 case 465:
  21.                         return "访问错误次数较多,请" + "分钟后再登录";
  22.                 case 471:
  23.                         return "无效的用户名";
  24.                 case 472:
  25.                         return "未找到用户名或密码不正确";
  26.                 case 474:
  27.                         return "验证码不正确";
  28.                 case 475:
  29.                         return "用户未登录系统";
  30.                 case 476:
  31.                         return "无效的加密锁";
  32.                 case 477:
  33.                         return "密码不正确";
  34.                 case 479:
  35.                         return "参数类型错误";
  36.                 case 480:
  37.                         return "参数错误";
  38.                 case 481:
  39.                         return "已登录系统";
  40.                 case 482:
  41.                         return "无效的跨域请求";
  42.                 case 483:
  43.                         return "请使用加密锁登录";
  44.                 case 484:
  45.                         return "用户状态未激活";
  46.                 case 485:
  47.                         return "活跃的用户";
  48.                 case 486:
  49.                         return "无效的用户";
  50.                 case 487:
  51.                         return "无效的用户";
  52.                 case 488:
  53.                         return "您的账户已锁定,请与管理员联系!";
  54.                 default:
  55.                         return "未知错误,没有找到相关错误参数";
  56.                 }
复制代码
回复 使用道具 举报

我觉的有整齐一点唉,不知道这算不断优化!!
回复 使用道具 举报
怎么没人用枚举
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马