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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

本帖最后由 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

39 个回复

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


水军,表示不会,优化,只能做到,少敲代码

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 新年快乐

查看全部评分

回复 使用道具 举报
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;
                       
                }
       

点评

FFF
没看出来改前与改后有什么明显区别  发表于 2014-1-1 15:47

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 +1鼓励分

查看全部评分

回复 使用道具 举报
表示不会...抢个前排可好?.
新年快乐,.

点评

FFF
新年快乐、同学,  发表于 2014-1-1 15:50
回复 使用道具 举报
FFF妹子  东少顶你一下。。。。。。。。。。。。。。。。
回复 使用道具 举报
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 "未知错误,没有找到相关错误参数";

评分

参与人数 1黑马币 +3 收起 理由
FFF + 3 没看出来改前与改后有什么明显区别.

查看全部评分

回复 使用道具 举报
好吊的样子、、、

评分

参与人数 1黑马币 +1 收起 理由
FFF + 1 技术分+1(伪)

查看全部评分

回复 使用道具 举报
我觉得主要是靠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 还是那么长~~~~~~

查看全部评分

回复 使用道具 举报
本帖最后由 潇湘溪语 于 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());//打印集合长度
        }
}


评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报
我是来打酱油的~~~
回复 使用道具 举报
我了个去的
回复 使用道具 举报
下载下来  慢慢搞、、记得技术分:lol
回复 使用道具 举报
  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. }
复制代码

评分

参与人数 1黑马币 +3 收起 理由
FFF + 3 没看出来改前与改后有什么明显区别.

查看全部评分

回复 使用道具 举报
         
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;
}

点评

话说,return后面是不能有代码的哎!!  发表于 2014-1-3 19:46

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 没看出来改前与改后有什么明显区别.

查看全部评分

回复 使用道具 举报
范晓冲 发表于 2014-1-1 15:18
switch(a){
    case 200:
         return "请求成功";

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

点评

FFF
switch是优化的一种。听说优化得比较好的是用Map集合来做,不知道是不是真的。  发表于 2014-1-1 16:16
回复 使用道具 举报
本帖最后由 高正新 于 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;
复制代码



评分

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

查看全部评分

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

好吧,看看谁能第一时间把最优的代码贴出来
回复 使用道具 举报
本帖最后由 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,编译会报错的。
回复 使用道具 举报
潇湘溪语 发表于 2014-1-1 11:18
用集合的思想来解决问题:
import java.util.HashMap;
import java.util.Map;

TreeMap   可以排序
回复 使用道具 举报
前面我用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 赞一个!已经很好了!哈哈~

查看全部评分

回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马