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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

我觉得主要是靠if-else与switch的效率问题,大家公认的是switch效率比if-else高,但switch只能用于int和枚举类型,应用范围没if-else广。下面是代码:
  1. public class OptimizeIf {
  2.        
  3.         public void loginResult(int a){
  4.                  switch(a){
  5.          case 200:
  6.                  System.out.println("请求成功");
  7.                  break;
  8.          case 400:
  9.                  System.out.println("错误的请求");
  10.                  break;
  11.          case 404:
  12.                  
  13.                  System.out.println("没有找到访问页");
  14.                  break;
  15.                  
  16.          case 409:
  17.                  
  18.                  System.out.println("登录冲突,请刷新页面再登录");
  19.                  break;
  20.                  
  21.          case 460:
  22.                  
  23.                  System.out.println("请刷新页面再登录");
  24.                  break;
  25.          
  26.          case 461:
  27.                  
  28.                  System.out.println("请刷新页面再登录");
  29.                  break;
  30.          
  31.          case 462:
  32.                  
  33.                  System.out.println("请刷新页面再登录");
  34.                  break;
  35.          case 463:
  36.                  System.out.println( "无效的查询参数");
  37.                  break;
  38.          
  39.          case 464:
  40.                  System.out.println("缺失数据");
  41.                  break;
  42.                  
  43.          case 465:

  44.                  System.out.println("访问错误次数较多,请5分钟后再登录!");
  45.                  break;
  46.          
  47.          case 471:
  48.                  
  49.                  System.out.println("无效的用户名");
  50.                  break;
  51.          
  52.          case 472:
  53.                  
  54.                  System.out.println("未找到用户名或密码不正确");
  55.                  break;
  56.                  
  57.          case 474:
  58.          
  59.                  System.out.println("验证码不正确");
  60.                  break;
  61.          
  62.          case 475:
  63.                  
  64.                  System.out.println("用户未登录系统");
  65.                  break;
  66.          
  67.          case 476:
  68.          
  69.                  System.out.println("无效的加密锁");
  70.                  break;
  71.                  
  72.          case 477:
  73.          
  74.                  System.out.println( "密码不正确");
  75.                  break;
  76.          
  77.          case 479:
  78.                  
  79.                  System.out.println( "参数类型错误");
  80.                  break;
  81.                  
  82.          case 480:
  83.                  
  84.                  System.out.println("参数错误");
  85.                  break;
  86.          
  87.          case 481:
  88.                  
  89.                  System.out.println("已登录系统");
  90.                  break;
  91.          
  92.          case 482:
  93.                  
  94.                  System.out.println ("无效的跨域请求");
  95.                  break;
  96.          
  97.          case 483:

  98.                  System.out.println( "请使用加密锁登录");
  99.                  break;
  100.          
  101.          case 484:
  102.                  System.out.println( "用户状态未激活");
  103.                  break;
  104.                  
  105.          case 485:
  106.          
  107.                  System.out.println("活跃的用户");
  108.                  break;
  109.                  
  110.          case 486:

  111.                  System.out.println( "无效的用户");
  112.                  break;
  113.                  
  114.          case 487:

  115.                  System.out.println("无效的用户");
  116.                  break;
  117.                  
  118.          case 488:

  119.                  System.out.println("您的账户已锁定,请与管理员联系!");
  120.                  break;
  121.                  
  122.          default:
  123.                          System.out.println("未知错误,没有找到相关错误参数");
  124.                          break;
  125.                  
  126.          }//End of Switch
  127.         }//End of login

  128. }
复制代码



评分

参与人数 1技术分 +1 收起 理由
FFF + 1 还是那么长~~~~~~

查看全部评分

回复 使用道具 举报
前面我用switch确实是换汤不换药,写另一个程序是偶尔想到可以用Map集合来优化,把返回的状态码放在key中,信息放在value中,这样就可以通过Map的get方法获取状态信息。代码如下:
  1.         public String login(int a){
  2.                 int[] statusNum={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};
  3.                 String[] statusStr={"请求成功","错误的请求","没有找到访问页","登录冲突,请刷新页面再登录","请刷新页面再登录","请刷新页面再登录","请刷新页面再登录","无效的查询参数","缺失数据","访问错误次数较多,请5分钟后再登录!","无效的用户名","未找到用户名或密码不正确","验证码不正确","用户未登录系统","无效的加密锁","密码不正确","参数类型错误","参数错误","已登录系统","无效的跨域请求","请使用加密锁登录","用户状态未激活","活跃的用户","无效的用户","无效的用户","您的账户已锁定,请与管理员联系!"};
  4.                 String message="";
  5.                 Map<Integer,String> status=new HashMap<Integer,String>();
  6.                 for(int i=0;i<statusNum.length;i++){
  7.                         status.put(statusNum[i], statusStr[i]);
  8.                 }
  9.                 message=status.get(a);
  10.                 System.out.println(message);
  11.                 return message;
  12.         }
  13.         @Test
  14.         public void testLogin(){
  15.                 login(400);
  16.         }
复制代码




评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!已经很好了!哈哈~

查看全部评分

回复 使用道具 举报
第三次优化,用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算法,查找起来要快。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马