首页 > 解决方案 > 如何编写 switch 语句,特别是默认语句

问题描述

我是一个学习Java的初学者,我的老师给了我这个问题:

编写一个 switch 语句,根据 int 变量 score 的值为 char 等级分配一个值。

  • 介于 0 和 4 之间(含)的分数获得“F”。
  • 5 或 6 分获得“D”
  • 7分获得'C'
  • 8分获得'B'
  • 9 或 10 分获得“A”

任何其他分数都会获得“X”。

除了 switch 语句本身之外,不应包含其他代码。

这是我写的:

switch (grade) {
case 'A':
    break;
case 'B':
    break;
case 'C':
    break;
case 'D':
    break;
case 'F':
    break;
case 'X': 

 break;
}

在网站上运行后,我发现除了“X”之外的所有情况都有效。所以我尝试了:

default: grade = 'X'

但这也没有用。我怎样才能添加'X'作为这个switch语句的默认值,什么可以帮助我防止自己再次犯这个错误?

标签: javaswitch-statement

解决方案


让我们尽可能简单地解释这一点。

您想检查分数以分配成绩。

Switch 取一个变量,在您的情况下,您放置了等级,并检查它是否与案例匹配,以防等级等于A,等于 B,C... 如果我解释得很好,第一个问题应该很容易看,你正在检查你试图分配的变量。一开始您没有等级值,因此无法检查条件。因此,您应该检查分数(将其放在开关上),并在案例内分配等级。

String grade; //no values
int score=4; //The variable we want to check
switch (score) {
        case 0:
            grade = "F";
            break;
        case 1:
            grade = "F";
            break;
        case 2:
            grade = "F";
            break;
        case 3:
            grade = "F";
            break;
        case 4:
            grade = "F";
            break;
        case 5:
            grade = "D";
            break;
        case 6:
            grade = "D";
            break;
        case 7:
            grade = "C";
            break;
        case 8:
            grade = "B";
            break;
        case 9:
        case 10:
            grade = "A";
            break;
        default:
            grade = "X";
    }

你可以把它想象成一系列的 if 检查相等性:

if(score==0){
    grade="F";
}
if(score == 1){
    grade="F";
}
if(score == 2){
    grade="F";
}
if(score == 3){
    grade="F";
}
if(score == 4){
    grade="F";
}
if(score == 5){
    grade="D";
}
if(score == 6){
    grade="D";
}
//and so on

(使用 else if 会更准确,但这是一个试图使其尽可能简单的示例,也没有涵盖所有开关功能,但您可以了解我对检查分配的意思)。

最后,您的等级变量将有一个值,因为您在切换案例中分配了它。

您可以改进该开关,摆脱前 4 个案例的中断,因此它将像“级联”一样工作,跳转到下一个案例,直到找到中断:

  String grade; //no values
    int score=4 //The variable we want to check
    switch (score) {
            case 0:
            case 1:
            case 2:
            case 3:
            case 4:
                grade = "F";
                break;
            case 5:
                grade = "D";
                break;
            case 6:
                grade = "D";
                break;
            case 7:
                grade = "C";
                break;
            case 8:
                grade = "B";
                break;
            case 9:
            case 10:
                grade = "A";
                break;
            default:
                grade = "X";
        }

推荐阅读