Java—自定义异常类

题目:

定义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则新建学生对象。然后输入一行学生数据,格式为姓名 年龄,接着调用setNameaddScore。否则跳出循环。
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.Arrays;
import java.util.Scanner;

public class Main {

	public static void main(String [] args){
		Scanner in=new Scanner(System.in);
		String s=null;
		while(!(s=in.next()).equals("other")) {
			Student stu=new Student();
			in.nextLine();
			String nameAndscore=in.nextLine();
			String[] arr=nameAndscore.split("\\s+");
			try {
				String name=arr[0];
				stu.setName(name);
				int score=Integer.parseInt(arr[1]);
				stu.addScore(score);
				System.out.println(stu);
			}catch(IllegalNameException | IllegalScoreException e) {
				System.out.println(e);
			}catch(Exception e) {
				System.out.println("java.util.NoSuchElementException");
			}
		}
		System.out.println("scanner closed");
	}
}
class IllegalScoreException extends RuntimeException{
	String str;
	public IllegalScoreException() {
	}
	public IllegalScoreException(String str) {
		this.str = str;
	}
	@Override
	public String toString() {
		return "IllegalScoreException: score out of range, score=" + str;
	}
}
class IllegalNameException extends RuntimeException{
	String str;
    public IllegalNameException() {
    }

    public IllegalNameException(String str) {
        this.str = str;
    }

    @Override
    public String toString() {
        return "IllegalNameException: the first char of name must not be digit, name=" + str;
    }
}
class Student{
	private String name;
	private int score;
	public Student(){
        this.score = 0;
    }
	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) {
		if(this.score+score<0||this.score+score>100) {
			throw new IllegalScoreException(Integer.toString(this.score+score));
		}
		setScore(this.score+score);
		return this.score;
	}
	@Override
	public String toString() {
		return "Student [name=" + name + ", score=" + score + "]";
	}
	
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值