我这段代码应该怎么优化呢?如下所示用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("三线演员");
}
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("三线演员");
}
你知道查询算法中的2分算法麽?用那个试一下。比如先分2个入口。100~1000 , 3000~ 20000.符合这个条件再进入下个入口分支。
{
case 常量值1
....
break;
case 常量值2
.....
break;default
....
}
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("三线演员");
}
else if(s>20000){}
else if(s>8000){}
else if(s>3000){}
else if(s>1000){}
else if(s>100) {}
else {}
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…这样不行吗 ?
比较直观的解决办法
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
}
旨在共同学习,共同进步
我们的宗旨:不挑技术最好的,只挑最有诚意交流的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("替身演员");
}
}
(score <= 1000&& score > 100 ) ? "跑龙套者" :
(score <= 3000 && score > 1000) ? "群众演员" :
(score <= 8000 && score > 3000) ? "临时演员" :
(score <= 20000 && score > 8000) ? "替身演员" :
"三线演员");
String s = {"影视学徒","跑龙套者","群众演员","临时演员","替身演员","三线演员"};for(int i = 0; i < x.length; i++){
if(score <= x[i]) {
castvvUser.setGrade(s[i]);
break;
}
}这样for循环这段处理逻辑保持不变,要增项目只要往上面的数组中扔就行了.
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]);
}
}
????????????????
这一行是不是错了数组???
比如windows编程中要处理消息.
if(MSG == BNT_CLICK) DoXXX1();
else if(MSG == ....) DoXXX2();
else if(MSG == ....) DoXXXn();因为windows消息类型太多了.要牧举消息类型能把人累死.
所以把消息和函数指针做成两个数组.
用for循环来做,代码行数非常少,看起来非常简洁.
>>> s = ['影视学徒','跑龙套者','群众演员','临时演员','替身演员','三线演员']
>>> score = 8888
>>> print s[len([ i for i in x if i<score ])]
三线演员-----
够简洁吧?
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("三线演员");
}加上二分法,效率也高不了多少了.
要加上也可以,下班了,没时间了....你自己加上试试吧...
你指细看了吗? score 小于100的时候也是"影视学徒",而原题是等于100的时候才是.所以错了.
score 小于100的时候也是"影视学徒",而原题是等于100的时候才是.所以错了.