黑马程序员技术交流社区

标题: 关于if-else 的优化,请进来试试吧! [打印本页]

作者: FFF    时间: 2014-1-1 09:14
标题: 关于if-else 的优化,请进来试试吧!
本帖最后由 FFF 于 2014-1-1 10:00 编辑

这是某个菜鸟写的if-else判断语句。你能把他优化一下吗?
  1. if (a == 200) {
  2.             return "请求成功"
  3.         } else {
  4.             if (a == 400) {
  5.                 return "错误的请求"
  6.             } else {
  7.                 if (a == 404) {
  8.                     return "没有找到访问页"
  9.                 } else {
  10.                     if (a == 409) {
  11.                         return "登录冲突,请刷新页面再登录"
  12.                     } else {
  13.                         if (a == 460) {
  14.                             return "请刷新页面再登录"
  15.                         } else {
  16.                             if (a == 461) {
  17.                                 return "请刷新页面再登录"
  18.                             } else {
  19.                                 if (a == 462) {
  20.                                     return "请刷新页面再登录"
  21.                                 } else {
  22.                                     if (a == 463) {
  23.                                         return "无效的查询参数"
  24.                                     } else {
  25.                                         if (a == 464) {
  26.                                             return "缺失数据"
  27.                                         } else {
  28.                                             if (a == 465) {
  29.                                                 return "访问错误次数较多,请" + b.statusMsg + "分钟后再登录!"
  30.                                             } else {
  31.                                                 if (a == 471) {
  32.                                                     return "无效的用户名"
  33.                                                 } else {
  34.                                                     if (a == 472) {
  35.                                                         return "未找到用户名或密码不正确"
  36.                                                     } else {
  37.                                                         if (a == 474) {
  38.                                                             return "验证码不正确"
  39.                                                         } else {
  40.                                                             if (a == 475) {
  41.                                                                 return "用户未登录系统"
  42.                                                             } else {
  43.                                                                 if (a == 476) {
  44.                                                                     return "无效的加密锁"
  45.                                                                 } else {
  46.                                                                     if (a == 477) {
  47.                                                                         return "密码不正确"
  48.                                                                     } else {
  49.                                                                         if (a == 479) {
  50.                                                                             return "参数类型错误"
  51.                                                                         } else {
  52.                                                                             if (a == 480) {
  53.                                                                                 return "参数错误"
  54.                                                                             } else {
  55.                                                                                 if (a == 481) {
  56.                                                                                     return "已登录系统"
  57.                                                                                 } else {
  58.                                                                                     if (a == 482) {
  59.                                                                                         return "无效的跨域请求"
  60.                                                                                     } else {
  61.                                                                                         if (a == 483) {
  62.                                                                                             return "请使用加密锁登录"
  63.                                                                                         } else {
  64.                                                                                             if (a == 484) {
  65.                                                                                                 return "用户状态未激活"
  66.                                                                                             } else {
  67.                                                                                                 if (a == 485) {
  68.                                                                                                     return "活跃的用户"
  69.                                                                                                 } else {
  70.                                                                                                     if (a == 486) {
  71.                                                                                                         return "无效的用户"
  72.                                                                                                     } else {
  73.                                                                                                         if (a == 487) {
  74.                                                                                                             return "无效的用户"
  75.                                                                                                         } else {
  76.                                                                                                             if (a == 488) {
  77.                                                                                                                 return "您的账户已锁定,请与管理员联系!"
  78.                                                                                                             } else {
  79.                                                                                                                 return "未知错误,没有找到相关错误参数"
  80.                                                                                                             }
  81.                                                                                                         }
  82.                                                                                                     }
  83.                                                                                                 }
  84.                                                                                             }
  85.                                                                                         }
  86.                                                                                     }
  87.                                                                                 }
  88.                                                                             }
  89.                                                                         }
  90.                                                                     }
  91.                                                                 }
  92.                                                             }
  93.                                                         }
  94.                                                     }
  95.                                                 }
  96.                                             }
  97.                                         }
  98.                                     }
  99.                                 }
  100.                             }
  101.                         }
  102.                     }
  103.                 }
  104.             }
  105.         }
复制代码


优化得好的,技术分++++++++很多~!!!
最后,在新一年里祝大家马上有钱,马上有对象马上有车,马上放假{:soso_e113:}

BJHIZ2NK4WOWN41VQDK3[`2.jpg (70.83 KB, 下载次数: 15)

BJHIZ2NK4WOWN41VQDK3[`2.jpg

作者: 忄雾飞扬    时间: 2014-1-1 09:43
本帖最后由 忄雾飞扬 于 2014-1-1 09:46 编辑
  1.                 return a==200?"请求成功":a==400?"错误的请求":a==404?"没有找到访问页":a == 409?"登录冲突,请刷新页面再登录":a == 460?"请刷新页面再登录":a == 461?"请刷新页面再登录":a == 462?"请刷新页面再登录":a == 463? "无效的查询参数":"内容,水军没写,";
复制代码


水军,表示不会,优化,只能做到,少敲代码
作者: 776699    时间: 2014-1-1 10:09
public static void  method(int a){
               
                switch(a){
                case 200:
                        System.out.println("请求成功");
                        break;
                case 400:
                        System.out.println("错误的请求");
                        break;
                case 404:
                       
                        System.out.println("没有找到访问页");
                        break;
                       
                case 409:
                       
                        System.out.println("登录冲突,请刷新页面再登录");
                        break;
                       
                case 460:
                       
                        System.out.println("请刷新页面再登录");
                        break;
               
                case 461:
                       
                        System.out.println("请刷新页面再登录");
                        break;
               
                case 462:
                       
                        System.out.println("请刷新页面再登录");
                        break;
                case 463:
                        System.out.println( "无效的查询参数");
                        break;
               
                case 464:
                        System.out.println("缺失数据");
                        break;
                       
                case 465:

                        System.out.println("访问错误次数较多,请" + b.statusMsg + "分钟后再登录!";);
                        break;
               
                case 471:
                       
                        System.out.println("无效的用户名");
                        break;
               
                case 472:
                       
                        System.out.println("未找到用户名或密码不正确");
                        break;
                       
                case 474:
               
                        System.out.println("验证码不正确");
                        break;
               
                case 475:
                       
                        System.out.println("用户未登录系统");
                        break;
               
                case 476:
               
                        System.out.println("无效的加密锁");
                        break;
                       
                case 477:
               
                        System.out.println( "密码不正确");
                        break;
               
                case 479:
                       
                        System.out.println( "参数类型错误");
                        break;
                       
                case 480:
                       
                        System.out.println("参数错误");
                        break;
               
                case 481:
                       
                        System.out.println("已登录系统");
                        break;
               
                case 482:
                       
                        System.out.println ("无效的跨域请求");
                        break;
               
                case 483:
       
                        System.out.println( "请使用加密锁登录");
                        break;
               
                case 484:
                        System.out.println( "用户状态未激活");
                        break;
                       
                case 485:
               
                        System.out.println("活跃的用户");
                        break;
                       
                case 486:

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

                        System.out.println("无效的用户");
                        break;
                       
                case 488:
       
                        System.out.println("您的账户已锁定,请与管理员联系!");
                        break;
                       
                        default:
                                System.out.println("未知错误,没有找到相关错误参数");
                                break;
                       
                }
       
作者: 伍艳雄    时间: 2014-1-1 10:11
表示不会...抢个前排可好?.
新年快乐,.
作者: 黄晓东    时间: 2014-1-1 10:13
FFF妹子  东少顶你一下。。。。。。。。。。。。。。。。
作者: 776699    时间: 2014-1-1 10:31
if (a == 200) {
            return "请求成功"
        } else  if (a == 400) {
                return "错误的请求"
        } else  if (a == 404) {
                    return "没有找到访问页"
        } else  if (a == 409) {
                        return "登录冲突,请刷新页面再登录"
        } else  if (a == 460) {
                            return "请刷新页面再登录"
        } else  if (a == 461) {
                                return "请刷新页面再登录"
        } else  if (a == 462) {
                                    return "请刷新页面再登录"
        } else  if (a == 463) {
                                        return "无效的查询参数"
        } else  if (a == 464) {
                                            return "缺失数据"
        } else  if (a == 465) {
                                                return "访问错误次数较多,请" + b.statusMsg + "分钟后再登录!"
        } else  if (a == 471) {
                                                    return "无效的用户名"
        } else  if (a == 472) {
                                                        return "未找到用户名或密码不正确"
        } else  if (a == 474) {
                                                            return "验证码不正确"
        } else  if (a == 475) {
                                                                return "用户未登录系统"
        } else  if (a == 476) {
                                                                    return "无效的加密锁"
        } else  if (a == 477) {
                                                                        return "密码不正确"
        } else  if (a == 479) {
                                                                            return "参数类型错误"
        } else  if (a == 480) {
                                                                                return "参数错误"
        } else  if (a == 481) {
                                                                                    return "已登录系统"
        } else  if (a == 482) {
                                                                                        return "无效的跨域请求"
        } else  if (a == 483) {
                                                                                            return "请使用加密锁登录"
        } else  if (a == 484) {
                                                                                                return "用户状态未激活"
        } else  if (a == 485) {
                                                                                                    return "活跃的用户"
        } else  if (a == 487) {
                                                                                                            return "无效的用户"
        } else  if (a == 488) {
                                                                                                                return "您的账户已锁定,请与管理员联系!"
        } else {
                return "未知错误,没有找到相关错误参数";
作者: 胡永城    时间: 2014-1-1 10:36
好吊的样子、、、
作者: 任亚俊    时间: 2014-1-1 11:15
我觉得主要是靠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. }
复制代码




作者: 潇湘溪语    时间: 2014-1-1 11:18
本帖最后由 潇湘溪语 于 2014-1-1 11:22 编辑

用集合的思想来解决问题:
import java.util.HashMap;
import java.util.Map;

public class IfElseSimplify {

        public static void main(String[] args) {
                run(488);
        }

        public static void run(int key) {
                Map<Integer,String> maps = new HashMap<Integer,String>();
               
                maps.put(key, "未知错误,没有找到相关错误参数");//为了防止HashMap的覆盖作用,未知key应该放在最前面,让后面来覆盖。
                maps.put(200, "请求成功");
                maps.put(400, "错误的请求");
                maps.put(404, "没有找到访问页");
                maps.put(409, "登录冲突,请刷新页面再登录");
                maps.put(460, "请刷新页面再登录");
                maps.put(461, "请刷新页面再登录");
                maps.put(462, "请刷新页面再登录");
                maps.put(463, "无效的查询参数");
                maps.put(464, "缺失数据");
                maps.put(465, "访问错误次数较多,请 + b.statusMsg + 分钟后再登录");
                maps.put(471, "无效的用户名");
                maps.put(472, "未找到用户名或密码不正确");
                maps.put(474, "验证码不正确");
                maps.put(475, "用户未登录系统");
                maps.put(476, "无效的加密锁");
                maps.put(477, "密码不正确");
                maps.put(479, "参数类型错误");
                maps.put(480, "参数错误");
                maps.put(481, "已登录系统");
                maps.put(482, "无效的跨域请求");
                maps.put(483, "请使用加密锁登录");
                maps.put(484, "用户状态未激活");
                maps.put(485, "活跃的用户");
                maps.put(486, "无效的用户");
                maps.put(487, "无效的用户");
                maps.put(488, "您的账户已锁定,请与管理员联系!");

                System.out.println(maps.get(key));
                //System.out.println(maps.size());//打印集合长度
        }
}



作者: 胡永城    时间: 2014-1-1 11:32
我是来打酱油的~~~
作者: qq884024720    时间: 2014-1-1 11:37
我了个去的
作者: 刘旭升    时间: 2014-1-1 12:31
下载下来  慢慢搞、、记得技术分:lol
作者: 松子    时间: 2014-1-1 14:23
  1. if (a == 200) {
  2. return "请求成功";
  3. } else if (a == 400) {
  4. return "错误的请求";
  5. } else if (a == 404) {
  6. return "没有找到访问页";
  7. } else if (a == 409 || a == 460 || a == 461 || a == 462) {
  8. return "登录冲突,请刷新页面再登录";
  9. } else if (a == 463) {
  10. return "无效的查询参数";
  11. } else if (a == 464) {
  12. return "缺失数据";
  13. } else if (a == 465) {
  14. return "访问错误次数较多,请" + b.statusMsg + "分钟后再登录!";
  15. } else if (a == 471 || a == 486 || a == 487) {
  16. return "无效的用户名";
  17. } else if (a == 472) {
  18. return "未找到用户名或密码不正确";
  19. } else if (a == 474 || a == 477) {
  20. return "验证码不正确";
  21. } else if (a == 475) {
  22. return "用户未登录系统";
  23. } else if (a == 476) {
  24. return "无效的加密锁";
  25. } else if (a == 479 || a == 480) {
  26. return "参数类型错误";
  27. } else if (a == 481) {
  28. return "已登录系统";
  29. } else if (a == 482) {
  30. return "无效的跨域请求";
  31. } else if (a == 483) {
  32. return "请使用加密锁登录";
  33. } else if (a == 484) {
  34. return "用户状态未激活";
  35. } else if (a == 485) {
  36. return "活跃的用户";
  37. } else if (a == 488) {
  38. return "您的账户已锁定,请与管理员联系!";
  39. } else {
  40. return "未知错误,没有找到相关错误参数";
  41. }
复制代码


作者: 范晓冲    时间: 2014-1-1 15:18
         
switch(a){
    case 200:
         return "请求成功";
         break;
    case 400:
        return "错误的请求";
        break;
    case 404:
        return "没有找到访问页";
        break;
    case 409:
        return "登录冲突,请刷新页面再登录";
        break;
    case 460:
    case 461:
    case 462:        
        return "请刷新页面再登录";
        break;
    case 463:
        return "无效的查询参数";
        break;
    case 464:
        return"缺失数据";
        break;
    case 465:
        return "访问错误次数较多,请" + b.statusMsg + "分钟后再登录!";
        break;
    case 471:
    case 486:        
    case 487:
        return "无效的用户名";
        break;
    case 472:
        return "未找到用户名或密码不正确";
        break;
    case 474:
        return "验证码不正确";
        break;
    case 475:
        return "用户未登录系统";
        break;
    case 476:
        return "无效的加密锁";
        break;
    case 477:
        return  "密码不正确";
        break;
    case 479:
        return "参数类型错误";
        break;
    case 480:
        return "参数错误";
        break;
    case 481:
        return "已登录系统";
        break;
    case 482:
        return "无效的跨域请求";
        break;
    case 483:
        return "请使用加密锁登录";
        break;
    case 484:
        return "用户状态未激活";
        break;
    case 485:
        return "活跃的用户";
        break;
    case 488:
        return "您的账户已锁定,请与管理员联系!";
        break;
    default:
        return "未知错误,没有找到相关错误参数";
        break;
}
作者: 范晓冲    时间: 2014-1-1 16:04
范晓冲 发表于 2014-1-1 15:18
switch(a){
    case 200:
         return "请求成功";

有一点啊,返回结果相同的case语句放到一起来,这样减少了重复出现的代码。而且,对具体数据进行判断时,switch语句的效率高于if语句吧。不过,应该还有跟好的优化方案。当提问结束时,能不能把版主您认为最优的答案分享一下啊,让我等菜鸟长长见识,很是期待哦!!!
作者: 高正新    时间: 2014-1-1 16:07
本帖最后由 高正新 于 2014-1-1 16:35 编辑

看一下,哈哈代码如下,平时我见到这样的情况都会想到map
  1. Map<Integer, String> num2Status = new HashMap<Integer, String>(){
  2.                         {
  3.                         put(200, "请求成功");
  4.                         put(400, "错误的请求");
  5.                         put(404, "没有找到访问页");
  6.                         put(409, "登录冲突,请刷新页面再登录");
  7.                         put(460, "请刷新页面再登录");
  8.                         put(461, "请刷新页面再登录");
  9.                         put(462, "请刷新页面再登录");
  10.                         put(463, "无效的查询参数");
  11.                         put(464, "缺失数据");
  12.                         put(465, "访问错误次数较多,请" + b.statusMsg + "分钟后再登录!");
  13.                         put(471, "无效的用户名");
  14.                         put(472, "未找到用户名或密码不正确");
  15.                         put(474, "验证码不正确");
  16.                         put(475, "用户未登录系统");
  17.                         put(476, "无效的加密锁");
  18.                         put(477, "密码不正确");
  19.                         put(479, "参数类型错误");
  20.                         put(480, "参数错误");
  21.                         put(481, "已登录系统");
  22.                         put(482, "无效的跨域请求");
  23.                         put(483, "请使用加密锁登录");
  24.                         put(484, "用户状态未激活");
  25.                         put(485, "活跃的用户");
  26.                         put(486, "无效的用户");
  27.                         put(487, "无效的用户");
  28.                         put(488, "您的账户已锁定,请与管理员联系!");
  29.                         }
  30.                 };
  31.                 String msg = num2Status.containsKey(a) == false ? "未知错误,没有找到相关错误参数" : num2Status.get(a);
  32.                 return msg;
复制代码




作者: 范晓冲    时间: 2014-1-1 16:19
范晓冲 发表于 2014-1-1 16:04
有一点啊,返回结果相同的case语句放到一起来,这样减少了重复出现的代码。而且,对具体数据进行判断时, ...

好吧,看看谁能第一时间把最优的代码贴出来
作者: 776699    时间: 2014-1-1 17:22
本帖最后由 776699 于 2014-1-1 17:25 编辑
776699 发表于 2014-1-1 10:09
public static void  method(int a){
               
                switch(a){


敬爱的楼主,8#和14楼和我的没有什么区别,都是用switch case,语句优化if else, 他们的都加技术分一分,我的没加,有什么区别呢?表示不公平哦,O(∩_∩)O~
还有14# 的语法就是错误的,return,下面不能再放break,编译会报错的。

作者: Class_焱    时间: 2014-1-1 17:23
潇湘溪语 发表于 2014-1-1 11:18
用集合的思想来解决问题:
import java.util.HashMap;
import java.util.Map;

TreeMap   可以排序
作者: 任亚俊    时间: 2014-1-1 18:43
前面我用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.         }
复制代码





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

噢,map 优化原来比较好啊,谢谢楼主的提示啊,新年快乐哦
作者: 刘旭升    时间: 2014-1-1 19:20
本帖最后由 刘旭升 于 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. }
复制代码

作者: 潇湘溪语    时间: 2014-1-1 19:55
Class_焱 发表于 2014-1-1 17:23
TreeMap   可以排序

TreeMap可以按key自然排序,打印出来会好看一些,呵呵…
好多人后来都想到一起了,还可以更加优化
作者: 任亚俊    时间: 2014-1-1 20:20
第三次优化,用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>
复制代码





作者: 任亚俊    时间: 2014-1-1 20:33
刘旭升 发表于 2014-1-1 19:20
下午去图书馆,写好没能及时传上来,真悲剧。和楼上的有点像是了,但是我还没有看集合、、、所以就试用的很 ...

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

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

集合我还没看,所以你说的我不太清楚。Hash还没有接触,不晓得内部处理的代码,不过数组有好处,也有坏处。遍历费事是不是就是其中的一个缺点呢?这题的优化,是优化代码的长度,和计算次数。但两者兼顾得需要更多的测试和研究。。。不过你还是挺厉害的
作者: 浮出一个美    时间: 2014-1-1 23:02
return a==200?"请求成功":a==400?"错误的请求":a==404?"没有找到访问页":a == 409?"登录冲突,请刷新页面再登录":a == 460?"请刷新页面再登录":"It's enough。";
作者: 然后没/db有然后    时间: 2014-1-2 00:09
新年快乐
作者: 猎鹰tianya    时间: 2014-1-3 17:19
:P我要试试!!
作者: 黑马IT学员    时间: 2014-1-3 18:44
本帖最后由 黑马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;
}

作者: 猎鹰tianya    时间: 2014-1-3 18:55
这样行不行呢?
  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.                 }
复制代码

作者: 猎鹰tianya    时间: 2014-1-3 18:56
猎鹰tianya 发表于 2014-1-3 18:55
这样行不行呢?

我觉的有整齐一点唉,不知道这算不断优化!!
作者: zp931226    时间: 2017-5-10 15:25
怎么没人用枚举




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2