Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我想用if-else来替换java代码_Java_If Statement_Switch Statement - Fatal编程技术网

我想用if-else来替换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'; 直观的解决方案是:这是不可能的 开关需要一组谨慎的元件。一系列的数字是无

我希望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';

直观的解决方案是:这是不可能的

开关需要一组谨慎的元件。一系列的数字是无限的,你无法做到

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;    
    }