Java异常捕捉机制练习3

要求:完成一个 java application应用程序,接收用户通过键盘不断输入表示某门课程的成绩的字符串(按回车为一个字符串结束),当输入非法数字(输入值小于0或大于100)时提示成绩输入有误,当输入为非数字的字符串时提示输入格式不合法。

1.思路与知识点

此任务和之前相似仍需要自行定义异常类型,而此处异常要考虑两种情况,一是输入的字符串并非数字;二是输入的字符串数字过大或过小超出了现实中成绩的常规范围。这也是此题的关键,即如何去判断输入的字符串是否符合要求,可以总结为以下两个知识点:

  1. 从字符串中提取数字(参考链接
    在Java中,有时需要获取字符串中的数字进行后续判断,常用的从字符串中提取数字的方法有:正则表达式和用字符串方法处理。
    这里采用的是第二种方法,使用for循环依次遍历字符串的每个字符,在遍历时使用if判断每个字符是否为数字。此外,在遍历时用到的charAt方法有:
 //charAt(int index)方法是一个能够用来检索特定索引下的字符的String实例的方法,
 //charAt()方法返回指定索引位置的char值。索引范围为0~length()-1.
 //如: str.charAt(0)检索str中的第一个字符,str.charAt(str.length()-1)检索最后一个字符.
  1. String类型转换为int类型
    Java中String字符串类型转换为int类型主要方法是使用Integer中的parseInt()等方法。查找jdk文档可看到:
    在这里插入图片描述
    根据帮助文档可以看到具体语法有:
int 变量名 = Integer.parseInt(String 变量名);

2.代码

import java.util.Scanner;

/*
完成一个 java application应用程序,接收用户通过键盘不断输入表示某门课程的成绩的字符串(按回车为一个字符串结束),
    当输入非法数字(输入值小于0或大于100)时提示成绩输入有误,当输入为非数字的字符串时提示输入格式不合法。
 */
public class ExceptionWork3 {//类名
    public static void main(String[] args) {//主入口
        while (true){//定义死循环
            Scanner s = new Scanner(System.in);//输入对象创建,键盘等待用户输入直到输入回车停止接收
            System.out.println("请输入某门课程的成绩:");
            String grade = s.nextLine();//读取键盘输入字符串
            MygradeException m = new MygradeException();//自定义异常对象创建
            if (!grade.equals("quit")){//未执行退出指令时
                //异常捕捉
                try {//未发生异常时执行try代码块
                    String a = m.Grades(grade);//将键盘输入字符串数据赋值到自定义异常类参数中
                    System.out.println("成绩记录成功");
                }catch (Exception e){//发生异常时执行catch代码块
                    e.printStackTrace();//控制台打印输出异常信息
                    System.out.println("请重新输入合法成绩");
                }
            }else {//用户输入“quit”后终止循环强制退出。
                System.exit(0);
            }
        }
    }
}
//自定义异常类型GradeException继承父类Exception
class GradeException extends Exception{
    public GradeException(String msg){
        super(msg);//继承父类构造方法
    }
}
//自定义MygeadeException用于向上(GradeException)抛出异常
class MygradeException{
    public String Grades(String grade)throws GradeException{//定义方法Grades向GradeException抛出异常
        String a = grade;
        //判断输入字符串是否是数字
        for (int i=0;i<a.length();i++){//使用length()方法获取字符串长度,进而遍历字符串
            //charAt(int index)方法是一个能够用来检索特定索引下的字符的String实例的方法,
            //charAt()方法返回指定索引位置的char值。索引范围为0~length()-1.
            //如: str.charAt(0)检索str中的第一个字符,str.charAt(str.length()-1)检索最后一个字符.
            if (a.charAt(i)<'0' || a.charAt(i)>'9'){//通过遍历检索字符串中的每一个字符是否在‘0’-‘9’的范围内,即判断是否为数字
                throw new GradeException("输入格式不合法");//抛出异常
            }
        }
        //将String类型转换成int再判断大小是否符合成绩数值规定
        int grades = Integer.parseInt(grade);//String类型数据转换成int类型
        if (grades <0 || grades > 100){//判断数值是否在1-100内
            throw new GradeException("成绩输入有误");//若不在则抛出异常
        }
        return a;//返回a
    }

}


3.运行结果

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值