关于使用Switch语句实现一个判断学生成绩的一段小练习

关于使用Switch语句实现一个判断学生成绩的一段小练习

[0,60)不及格
[60,70)一般
[70,80)中
[80,90)良
[90,100)优秀
100满分

关于设计思路:
第一步:输入成绩
Scanner srcj = new Scanner(System.in);
System.out.println(“请输入成绩!”);
double sjcj = srcj.nextDouble();

Scanner类是用来获取用户的输入的,且成绩是包含有小数的
所以我使用的是double类型来接收参数的

第二步:获取输入的成绩且判断输入的成绩是否有误,如果有误,则重新输入。
while(sjcj<0 || sjcj>100){
System.out.println(“成绩输入有误!请重新输入”);
sjcj = srcj.nextDouble();
}
这里我最开始想到的竟然是用if()来判断,如果为true,则再重新执行一遍主方法,后来觉得重新执行一遍主方法肯定没有写个循环有效率。

第三步:接收正确的值,然后进行swicth进行判断
这里有一个注意的点,就是swicth的值只能是一个固定的常量,所以需要把值变成一个固定的常量,
那如何来做呢,这个时候就要想到算术运算的一个符号(/)除,然后再要想到基本数据类型中的整型,
这里我用的是int,因为程序跟平常计算不太一样,int类型的值除以某个数,最后的值,都是商(且不会四舍五入,比如最后的商是59.9,在程序里最后的商,是59),我们要判断的是满分100分的成绩,
所有这里就可以除以10,然后取最后的商来做判断
int cj = (int)sjcj; //因为接收参数时用的是double,所以这里需要强制类型转换一下。
switch(cj/10){
case 10:
System.out.println(“满分”);
break;
case 9:
System.out.println(“优秀”);
break;
case 8:
System.out.println(“良”);
break;
case 7:
System.out.println(“中”);
break;
case 6:
System.out.println(“一般”);
break;
default://因为60分一下就算不及格了,这里就直接default统一判断了。
System.out.println(“不及格”);
}

嗯。。。。。。。。。。。。。这样就完了么,其实并没有,写程序,我们还是得严谨的一点对吧。
所以,如果输入的不是int类型,也不是double类型的数据,是不是程序就是直接报错?
对,程序会直接终止。
所以我们这个时候就可以想到下面这一段代码

第四步:捕获异常
try{
//可能会出先问题的代码
}catch(异常的类名A e){
//出现了异常类A类型的异常,则执行该段代码
}
这样捕获到异常然后让程序继续下去是不是会比直接终止程序要好很多。

所以最后的代码应该是如下的:
Scanner srcj = new Scanner(System.in);
System.out.println(“请输入成绩!”);
try {
double sjcj = srcj.nextDouble();
while(sjcj<0 || sjcj>100){
System.out.println(“成绩输入有误!请重新输入”);
sjcj = srcj.nextDouble();
}
int cj = (int)sjcj;
switch(cj/10){
case 10:
System.out.println(“满分”);
break;
case 9:
System.out.println(“优秀”);
break;
case 8:
System.out.println(“良”);
break;
case 7:
System.out.println(“中”);
break;
case 6:
System.out.println(“及格”);
break;
default:
System.out.println(“不及格”);
}
}catch(InputMismatchException e){
System.out.println(“请输入整数或者小数!”);
Test.main(null);//重新执行主方法
}

好了,至此,这个小练习结束
稍微总结一下
if(boolean—可以写逻辑) 出现判断区间或者比较复杂的逻辑时,用if()
swicth() 判断固定值的时候效率会更高一点
所以,这里其实用if()会好一点。
swicth()里接受的数据类型:byte,short,int,char,在JDK1.5版本之后新增枚举,JDK1.7版本新增String
case 不支持变量,只支持常量,且不能有相同的
swicth()里的数据类型与case数据类型要一致
捕获异常
try{
//可能会出先问题的代码
}catch(异常的类名A e){
//出现了异常类A类型的异常,则执行该段代码
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值