我想用if-else来替换java代码
我希望java代码使用相同的开关执行?我如何通过java实现这一点我想用if-else来替换java代码,java,if-statement,switch-statement,Java,If Statement,Switch Statement,我希望java代码使用相同的开关执行?我如何通过java实现这一点 if(ave>=90.0) return 'A'; else if(ave>=80.0) return 'B'; else if(ave>=70.0) return 'C'; else if(ave>=60.0) return 'D'; else return 'F'; 直观的解决方案是:这是不可能的 开关需要一组谨慎的元件。一系列的数字是无
if(ave>=90.0)
return 'A';
else if(ave>=80.0)
return 'B';
else if(ave>=70.0)
return 'C';
else if(ave>=60.0)
return 'D';
else
return 'F';
直观的解决方案是:这是不可能的 开关需要一组谨慎的元件。一系列的数字是无限的,你无法做到
switch(something) {
case 90.0:
case 90.000000000001:
....
但有一种方法可以做到这一点:将范围转换为某个数字:
private static int toRangeIndex(double d) {
if (d >= 90.0)
return 0;
else if (d >= 80.0)
return 1;
else if (d >= 70.0)
return 2;
else if (d >= 60.0)
return 3;
else
return 4;
}
public static double sumColoumn(double[][] m, int coloumnIndex) {
switch (toRangeIndex(ave)) {
case 0:
return 'A';
case 2:
return 'B';
case 3:
return 'C';
case 4:
return 'D';
default:
return 'F';
}
}
在你的情况下,这显然不是更好的。但在某些情况下,您可以使用这种技术。不可能直接使用,切换需要精确匹配
您可以编写如下函数:
int classify(double avg) {
// perform some if-else chain, or loop with test inside, or calculation:
return (int)(avg/10.0);
}
然后使用开关中的返回值:
switch (classify (avg)) {
case 10: // average of exact 100.0 gives 10, let's not F that...
case 9:
return 'A';
case 8:
return 'B';
//...
default:
return 'F';
}
但是,在你的具体情况下,它只是移动如果。。。将梯形图转换为不同的功能,可能不是个好主意。所以不要这样做:-
或者更确切地说,若您这样做,那个么这样做是因为它使代码更易于理解和维护,而在我看来并不是因为您想使用switch语句
int findIndex(double ave){
int index=(int)(ave/10.0);
if(index>=9)
return 9;
else
return index;
}
我找到了答案
switch(t1)
{
case 100: case 99: case 98: case 97:case 96:case 95:case 94:case 93:case 92:case 91:case 90:
cr='A';
break;
case 89: case 88: case 87: case 86:case 85:case 84:case 83:case 82:case 81:case 80:
cr='B';
break;
case 79: case 78: case 77: case 76:case 75:case 74:case 73:case 72:case 71:case 70:
cr='C';
break;
case 69: case 68: case 67: case 66:case 65:case 64:case 63:case 62:case 61:case 60:
cr='D';
break;
default:
cr = 'F';
break;
}
好极了写一些代码。大写字母D在ascii中是68,因此可以执行strVar=Math.maxMath.min68-90-ave/10,65,68.toString;但可能不适合单兵,可能只是因为缺少E故意?@Pshemo看起来OP在写一些平均等级到字母等级的东西,所以我会说是的。@DennisMeng谢谢,我需要阅读一些关于几个县的评分系统的资料,以了解D和F E之间并非处处都使用。似乎OP是在试图避免if-else-if…,而不是用单独的方法来包装它。@Pshemo我知道。我不会在这里这么做,因为这只是更多的代码。但是,如果您有一个将其内部状态保持为双倍的对象,那么最好添加这样一个方法,以便代码可以使用一个简单的开关。转换代码只存在一次,使用转换值的代码可以存在多次。
switch(t1)
{
case 100: case 99: case 98: case 97:case 96:case 95:case 94:case 93:case 92:case 91:case 90:
cr='A';
break;
case 89: case 88: case 87: case 86:case 85:case 84:case 83:case 82:case 81:case 80:
cr='B';
break;
case 79: case 78: case 77: case 76:case 75:case 74:case 73:case 72:case 71:case 70:
cr='C';
break;
case 69: case 68: case 67: case 66:case 65:case 64:case 63:case 62:case 61:case 60:
cr='D';
break;
default:
cr = 'F';
break;
}