jmu-Java-06异常-04-自定义异常(综合)

    科技2022-08-08  117

    定义IllegalScoreException异常类,代表分数相加后超出合理范围的异常。该异常是checked exception,即希望该异常一定要被捕获处理。

    定义IllegalNameException异常类,代表名字设置不合理的异常。该异常是unchecked exception

    定义Student类。

    属性:

    private String name; private int score;

    方法:

    toString //自动生成 setter/getter //自动生成 改造setName //如果姓名首字母为数字则抛出IllegalNameException public int addScore(int score) //如果加分后分数<0 或>100,则抛出IllegalScoreException,加分不成功。

    main方法:

    输入new则新建学生对象。然后输入一行学生数据,格式为姓名 年龄,接着调用setName,addScore。否则跳出循环。setName不成功则抛出异常,并打印异常信息,然后继续下一行的处理。addScore不成功则抛出异常,并打印异常信息,然后继续下一行的处理。如果2、3都成功,则打印学生信息(toString)如果在解析学生数据行的时候发生其他异常,则打印异常信息,然后继续下一行的处理。Scanner也是一种资源,希望程序中不管有没有抛出异常,都要关闭。关闭后,使用System.out.println("scanner closed")打印关闭信息

    注意: 使用System.out.println(e);打印异常信息,e为所产生的异常。

    输入样例:

    new zhang 10 new wang 101 new wang30 new 3a 100 new wang 50 other

    输出样例:

    Student [name=zhang, score=10] IllegalScoreException: score out of range, score=101 java.util.NoSuchElementException IllegalNameException: the first char of name must not be digit, name=3a Student [name=wang, score=50] scanner closed

    答案

    import java.util.Scanner; class IllegalScoreException extends RuntimeException { String message; public IllegalScoreException() { } public IllegalScoreException(String message) { this.message = message; } @Override public String toString() { return "IllegalScoreException: score out of range, score=" + message; } } class IllegalNameException extends RuntimeException { String message; public IllegalNameException() { } public IllegalNameException(String message) { this.message = message; } @Override public String toString() { return "IllegalNameException: the first char of name must not be digit, name=" + message; } } class Student { private String name; private int score; public Student(){ this.score = 0; } @Override public String toString() { return "Student [" + "name=" + name + ", score=" + score + ']'; } public String getName() { return name; } public void setName(String name) { if (name.charAt(0) >= '0' && name.charAt(0) <= '9'){ throw new IllegalNameException(name); } this.name = name; } public int getScore() { return score; } public void setScore(int score) { this.score = score; } public int addScore(int score) throws IllegalScoreException{ if (this.score + score < 0||this.score + score > 100){ throw new IllegalScoreException(Integer.toString(this.score + score)); } setScore(this.score + score); return this.score; } } public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()){ String str = scanner.next(); if (!str.equals("new")){ scanner.close(); System.out.println("scanner closed"); break; } Student stu = new Student(); scanner.nextLine(); String nameAndScore = scanner.nextLine(); String[] arr = nameAndScore.split("\\s+"); try{ String name = arr[0]; int score = Integer.parseInt(arr[1]); stu.setName(name); stu.addScore(score); System.out.println(stu); }catch (IllegalNameException | IllegalScoreException e){ System.out.println(e); }catch (Exception e){ System.out.println("java.util.NoSuchElementException"); } } } }
    Processed: 0.010, SQL: 8