题目四: 输入学生成绩score,获取综合评级level(其中学生成绩大于90,评级为A;学生成绩在60-89之间,评级为B;学生成绩在60分以下,评级为C(注意:满分100分))
A.Switch语句法
1.核心代码
flag=true;
int temp=(int)score/10;
//用来简化switch里面的情况
switch (temp){
case 9 :
case 10: level='A';
break;
case 8:
case 7:
case 6: level='B';
break;
default: level='C';
break;
}
2.常见问题点分析
2.1 为何要用temp接收(int)score/10的值
解答如下:
若不除以10,那么case值涵盖的情况太多(90到100就有10个数了)
这样写起来的switch太常了
除以10强制取整后,对于90-100 评级A,仅需判断temp值是否为9或者10
对于60-89 评级B,仅需判断temp值是否为6或7或8
至于评级c,就是default部分
2.2 为何需要强制取整如(int)score/10???
解答如下:
a.学生成绩有可能带小数,因而设score变量类型为int不太合适
b.小数与整数相除结果为小数,因而double类型的数据除以int类型数据
结果依然为小数
c. switch语句里面的case值不能为小数且条件也只能为整型数据
3 运行截图
3.1 第一次输入不合乎条件且第二次score=43
3.2 第一次输入不合乎条件且第二次score=61
3.3 第一次输入不合乎条件且第二次score=100
3.4 输入值 score=59
3.5 输入值 score=89
3.6 输入值 score=91
4.源代码
import java.util.Scanner;
public class ConditionOperator01 {
public static void main(String[] args) {
System.out.println("题目四: 输入学生成绩score,获取取综合评级level");
System.out.println("其中学生成绩大于90,评级为A;学生成绩在60-89之间,评级为B;学生成绩在60分以下,评级为C(注意:满分100分)");
Scanner scanner=new Scanner(System.in);
double score=scanner.nextDouble();
boolean flag=true;
char level='B';
//用字符变量level来存放评级,默认为B
while(true){
if(score>=0&&score<=100){
flag=true;
int temp=(int)score/10;
//用来简化switch里面的情况
switch (temp){
case 9 :
case 10: level='A';
break;
case 8:
case 7:
case 6: level='B';
break;
default: level='C';
break;
}
}else{
flag=false;
System.out.println("输入的分数值score有误,请检查后重新输入");
System.out.println("请重新输入学生的成绩");
score=scanner.nextDouble();
}
if(flag){
System.out.println("该学生评级为: "+level);
break;
}
}
}
}
B. 三目运算符法(嵌套)
1.核心代码
flag=true;
int temp=(int)score/10;
//用来简化条件判断里面的情况
level=(temp>=9&&temp<=10)?'A':(temp>=6&&temp<=8)?'B':'C';
//第一层三目运算符里面的条件表达式2里面嵌套了一个条件表达式
//建立嵌套不要过多,因为代码阅读性会很差的
2.常见问题点分析
2.1 如何使用三目运算符?
条件?表达式1:表达式2
若满足条件,则返回表达式1的值,
若不满足条件,则返回表达式2的值
2.2 为何需要强制取整如(int)score/10???
解答如下:
简化数值的大小比较操作,提高代码执行效率
3 运行截图
3.1 第一次输入不合乎条件且第二次score=0
3.2 第一次输入不合乎条件且第二次score=69
3.3 第一次输入不合乎条件且第二次score=95
3.4 输入值 score=37
3.5 输入值 score=71
3.6 输入值 score=93
4.源代码
import java.util.Scanner;
public class ConditionOperator02 {
public static void main(String[] args) {
System.out.print("题目四: 输入学生成绩score,获取取综合评级level-----条件判断法\n");
System.out.println("其中学生成绩大于90,评级为A;学生成绩在60-89之间,评级为B;学生成绩在60分以下,评级为C(注意:满分100分)");
Scanner scanner=new Scanner(System.in);
double score=scanner.nextDouble();
boolean flag=true;
char level='B';
//用字符变量level来存放评级,默认为B
while(true){
if(score>=0&&score<=100){
flag=true;
int temp=(int)score/10;
//用来简化三目运算符里面的情况
level=(temp>=9&&temp<=10)?'A':(temp>=6&&temp<=8)?'B':'C';
}else{
flag=false;
System.out.println("输入的分数值score有误,请检查后重新输入");
System.out.println("请重新输入学生的成绩");
score=scanner.nextDouble();
}
if(flag){
System.out.println("该学生评级为: "+level);
break;
}
}
}
}