我这段代码应该怎么优化呢?如下所示用if判断的话,要遍历所有if判断                 if (score == 100) {
castvvUser.setGrade("影视学徒");
}
if (score <= 1000&& score > 100) {
castvvUser.setGrade("跑龙套者");
}
if (score <= 3000 && score > 1000) { castvvUser.setGrade("群众演员");
}
if (score <= 8000 && score > 3000) { castvvUser.setGrade("临时演员");
}
if (score <= 20000 && score > 8000) { castvvUser.setGrade("替身演员");
}
if (score <= 35000 && score > 20000) { castvvUser.setGrade("三线演员");
}

解决方案 »

  1.   

    不是方法问题,IF ELSE 的嵌套并没有使效率产生变话,是方法的问题。
    你知道查询算法中的2分算法麽?用那个试一下。比如先分2个入口。100~1000 , 3000~ 20000.符合这个条件再进入下个入口分支。
      

  2.   

    可以啊,用switch语句就行了,条件正确之后就直接break!switch(表达式)
    {
    case 常量值1
    ....
    break;
    case 常量值2
    .....
    break;default
    ....
    }
      

  3.   

    if (score == 100) {
     castvvUser.setGrade("影视学徒");
    }else if (score <= 1000&& score > 100) {
     castvvUser.setGrade("跑龙套者");
    }else if (score <= 3000 && score > 1000) {
     castvvUser.setGrade("群众演员");
    }else if (score <= 8000 && score > 3000) {
     castvvUser.setGrade("临时演员");
    }else if(score <= 20000 && score > 8000) {
     castvvUser.setGrade("替身演员");
    }else if(score <= 35000 && score > 20000) {
     castvvUser.setGrade("三线演员");
    }
      

  4.   

    哦 我以为LZ的也是ELSE IF的 HOHO 看错了 米事了。
      

  5.   

    I think it's unnecessary. Because it doesn't contain so much paths.Using 5#'s codes is OK, I think.
      

  6.   

    在这里你可以将&&后边的条件都去掉,我觉得根本没必要在加个&&条件,多余吧
      

  7.   

    if(s<35000){}
    else if(s>20000){}
    else if(s>8000){}
    else if(s>3000){}
    else if(s>1000){}
    else if(s>100) {}
    else {}
      

  8.   

    试是switch case的好像两者的效率差不多!
      

  9.   

    引用 5 楼 kokobox 的回复:Java codeif (score == 100) { 
    castvvUser.setGrade("影视学徒"); 
    }else if (score <= 1000) { 
    castvvUser.setGrade("跑龙套者"); 
    }else if (score <= 3000 ) { 
    castvvUser.setGrade("群众演员"); 
    }else if (score <= 8000 ) { 
    castvvUser.setGrade("临时演员"); 
    }else if(score <= 20000 ) { 
    castvvUser.setGrade("替身演员"); 
    }else if(score <= 3…这样不行吗 ?
      

  10.   

    else  if 
    比较直观的解决办法
      

  11.   

    if (score <= 100) {
    castvvUser.setGrade("影视学徒");
    } else if (score <= 1000) {
    castvvUser.setGrade("跑龙套者");
    } else if (score <= 3000) {
    castvvUser.setGrade("群众演员");
    } else if (score <= 8000) {
    castvvUser.setGrade("临时演员");
    } else if (score <= 20000) {
    castvvUser.setGrade("替身演员");
    } else if (score <= 35000) {
    castvvUser.setGrade("三线演员");
    } else {
    //Other
    }
      

  12.   

    (JAVA)至诚交流群 30700814 
    旨在共同学习,共同进步
    我们的宗旨:不挑技术最好的,只挑最有诚意交流的if(scort<=8000?true:false){
    if (score > 3000) { 
    castvvUser.setGrade("临时演员"); 
    }else if(score > 1000) { 
    castvvUser.setGrade("群众演员"); 
    }else if(score>100){
    castvvUser.setGrade("跑龙套者"); 
    }else if(score == 100) {
    castvvUser.setGrade("影视学徒"); 
    }
    }else{
    if (score > 20000 && score <= 35000) { 
    castvvUser.setGrade("三线演员"); 
    }else {
    castvvUser.setGrade("替身演员"); 
    }
    }
      

  13.   

    castvvUser.setGrade((score==100) ? "影视学徒" : 
    (score <= 1000&& score > 100 ) ? "跑龙套者" :
    (score <= 3000 && score > 1000)  ? "群众演员" :
    (score <= 8000 && score > 3000) ? "临时演员" :
    (score <= 20000 && score > 8000) ? "替身演员" :
    "三线演员");
      

  14.   

    如果只是选择IF ELSE 或者 SWITCH的话,我感觉在性能上的提升没有太多的用处,如果提升性能就要考虑算法,比如靠一下二分查找。但这样的效率提高也毕竟不是指数级的,基本上没有意义。我建议LZ用SWITCH写,比较清晰,在性能不能大幅提升的情况下,让自己的代码清晰应该是最佳的选择。
      

  15.   

    这样的代码最好的组织就是定义两个对应的数组,以后再加也不用增加if else块.int[] x = {100,1000,3000,8000,20000,3500};
    String s = {"影视学徒","跑龙套者","群众演员","临时演员","替身演员","三线演员"};for(int i = 0; i < x.length; i++){
       if(score <= x[i]) {
         castvvUser.setGrade(s[i]);
         break;
       } 
    }这样for循环这段处理逻辑保持不变,要增项目只要往上面的数组中扔就行了.
      

  16.   


    public static int[] gradeScore = {100,1000,3000,8000,20000,35000};
    public static String[] grade = {"影视学徒","跑龙套者","群众演员","临时演员","替身演员","三线演员"};

    public static setGrade(CastvvUser castvvUser) {
    boolean flag = true;
    for(int i=0;i<gradeScore.length;i++) {
    if(castvvUser.getScore<gradeScore[i]) {
    flag = false;
    if(i==0){
    castvvUser.setGrade(grade[i]);
    break;
    }
    castvvUser.setGrade(grade[i-1]);
    break;
    }
    }
    if(flag) {
    castvvUser.setGrade(grade[grade.length-1]);
    }
    }
      

  17.   

    String s = {"影视学徒","跑龙套者","群众演员","临时演员","替身演员","三线演员"}; 
    ????????????????
    这一行是不是错了数组???
      

  18.   

    其实,这不是我发明的.POCKET PC programing第一版,十多年前了的吧,老的C程序大师解决多条件操作就是这样做的.
    比如windows编程中要处理消息.
    if(MSG == BNT_CLICK) DoXXX1();
    else if(MSG == ....) DoXXX2();
    else if(MSG == ....) DoXXXn();因为windows消息类型太多了.要牧举消息类型能把人累死.
    所以把消息和函数指针做成两个数组.
    用for循环来做,代码行数非常少,看起来非常简洁.
      

  19.   

    来个python的:>>> x = [100,1000,3000,8000,20000,35000]
    >>> s = ['影视学徒','跑龙套者','群众演员','临时演员','替身演员','三线演员']
    >>> score = 8888
    >>> print s[len([ i for i in x if i<score ])]
    三线演员-----
    够简洁吧?
      

  20.   

    if (score == 100) { 
    castvvUser.setGrade("影视学徒"); 
    } else if (score <= 1000 && score > 100) { 
    castvvUser.setGrade("跑龙套者"); 
    } else if (score <= 3000) { castvvUser.setGrade("群众演员"); 
    } else if (score <= 8000) { castvvUser.setGrade("临时演员"); 
    } else if (score <= 20000) { castvvUser.setGrade("替身演员"); 
    }else if (score <= 35000) { castvvUser.setGrade("三线演员"); 
    }加上二分法,效率也高不了多少了.
    要加上也可以,下班了,没时间了....你自己加上试试吧...
      

  21.   


    你指细看了吗? score 小于100的时候也是"影视学徒",而原题是等于100的时候才是.所以错了.
      

  22.   


    score 小于100的时候也是"影视学徒",而原题是等于100的时候才是.所以错了.
      

  23.   

    晕,没有人顶我那个python风格的啊? 难道那不是最简洁的么?