java - 如何编写 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语句的默认值,什么可以帮助我防止自己再次犯这个错误?
解决方案
让我们尽可能简单地解释这一点。
您想检查分数以分配成绩。
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";
}
推荐阅读
- git - 权限被拒绝并且无法从远程存储库中读取
- javascript - 如何在 React Native 中使用动画值对数组进行索引?
- python - 是否可以在不迭代的情况下搜索整个元组中的条目?
- flutter - 发生异常。_Exception(异常:读取 PDF 时出错!)从 url 加载 pdf
- amazon-web-services - 使用 Visual Studio 工具包检索 AWS 机密
- r - 尝试从具有特定条件的数据框中获取某些行
- r - Kable cell_spec 格式删除表格的行标签
- r - R 中的 xgboost:xgb.cv 的 early_stopping_rounds 的容差是多少?
- javascript - 仅使用提交按钮以 HTML 表单执行 onsubmit 功能
- mysql - sql 只返回具有特定列值的行