充分利用switch语句

Mar*_* II -1 java switch-statement

我的Java教科书问我有关以下错误的信息:

switch (score)
        {
            case (score > 90):
                grade = 'A';
                break;
            case (score > 80):
                grade = 'B';
                break;
            default:
                grade = 'C';
        }
Run Code Online (Sandbox Code Playgroud)

我已经知道错误在哪里:

  • Switch语句不是为比较而构建的(score > 90); 那是if/else语句.

但是,这让我疑惑:怎么可能一个switch语句有效地占到整数的范围是多少?

我能想到的最明显的例子如下,但我发现它相当蛮力:

switch (score)
    {
        case 90: case 91: case 92: case 94: case 95:
        case 96: case 97: case 98: case 99: case 100:
            grade = 'A';
            break;
        case 80: case 81: case 82: case 84: case 85:
        case 86: case 87: case 88: case 89:
            grade = 'B';
            break;
        default:
            grade = 'C';
    }
Run Code Online (Sandbox Code Playgroud)

如何在switch语句中表达这样的概念?

rge*_*man 8

如果您利用分数随10分数的每次变化而变化的事实,并假设这score是一个整数数据类型,那么您可以除以10大多数情况:

switch (score / 10)
{
    case 9:
    case 10:
        grade = 'A';
        break;
    case 8:
        grade = 'B';
        break;
    default:
        grade = 'C';
}
Run Code Online (Sandbox Code Playgroud)

如果没有这样的规则(如果"等级"桶大小不同且任意),那么你能做的最好的是if/else-if/else语句.