速学堂java实战第六章异常机制作业
若有不对之处,望大家指正,谢谢
一、选择题
1.C try语句中没有异常,输出“try”,即使try和catch块中存在return语句,finally语句也会执行
2.C
3.AC //1处 应为throws,//3处应为throw
4.CD 答案应该为CD,题目中RuntimeException有:NullPointerException、ArithmeticException、ArrayIndexOutOfBoundsException、ClassNotFoundException(classloader加载类的时候发现类不存在在类路径的时候会报出,实际上为运行时异常)、ClassCastException; CheackedException有:InputMismatchException(因为查百度在RuntimeException中没有发现它,如果博主我说错了请大家指正); SexException不清楚是啥???
5.B 若输入字符串,则应该是InputMismatchException
二、简答题
- Error可以认为是java虚拟机出现错误,不是程序员处理的错误;Exception意思是异常,分为 CheckedException、RuntimeException,是程序员必须处理的异常
- CheckedException: 检查异常,若不处理编译器会报错,需要我们处理,处理方式有抛出(throws),捕获(try—catch—finally)
RuntimeException:运行时异常,一般是编程时的逻辑错误,需要我们编程时注意。 - try:异常捕获并处理的范围,若捕获到异常则会跳到相应的catch语句
catch:处理可能产生的不同类型的异常对象
finally:不管是否发生了异常,都必须要执行的,常在finally中关闭程序块已打开的资源
throw:抛出异常对象,只能跟一个
throws: 在方法声明中抛出一个或多个异常对象 - 如上。
三、编程题 - 编写程序接收用户输入分数信息,如果分数在0—100之间,输出成绩。如果成绩不在该范围内,抛出异常信息,提示分数必须在0—100之间。
要求:使用自定义异常实现。
public class TestInputGrade {
public static void main(String[] args) throws IllegalGradeException {
Scanner Input = new Scanner(System.in);
Student student = new Student();
System.out.print("请输入您的分数:(范围:0-100分)");
double stu_grade = Input.nextDouble();
student.setGrade(stu_grade);
System.out.println("您输入的分数为:"+student.getGrade());
Input.close();
}
}
//学生类
class Student{
public double grade = 0;
public Student() {
}
public void setGrade(double grade) throws IllegalGradeException {
if(grade<0|grade>100) {
throw new IllegalGradeException("分数必须在0-100之间");
}else {
this.grade = grade;
}
}
public double getGrade() {
return grade;
}
}
//自定义非法分数异常
class IllegalGradeException extends Exception{
//默认构造器
public IllegalGradeException() {
}
//自定带参构造器
public IllegalGradeException(String message) {
super(message);
}
}
- 写一个方法void isTriangle(int a,int b,int c),判断三个参数是否能构成一个三角形, 如果不能则抛出异常IllegalArgumentException,显示异常信息 “a,b,c不能构成三角形”,如果可以构成则显示三角形三个边长,在主方法中得到命令行输入的三个整数, 调用此方法,并捕获异常。
public class ConstructTriangle {
public static void main(String[] args) throws IllegalArgumentException {
Scanner Input = new Scanner(System.in);
System.out.print("请输入第一条边的长度(单位:cm):");
int a = Input.nextInt();
System.out.print("请输入第二条边的长度(单位:cm):");
int b = Input.nextInt();
System.out.print("请输入第三条边的长度(单位:cm):");
int c = Input.nextInt();
isTriangle(a,b,c);
Input.close();
}
static void isTriangle(int a,int b,int c) throws IllegalArgumentException {
if(a<0|b<0|c<0) {
throw new IllegalArgumentException("a,b,c不能构成三角形");
}else if(a+b>c&&a+c>b&&b+c>a) {
System.out.println("创建三角形成功!边长分别为:"+a+","+b+","+c);
}else {
throw new IllegalArgumentException("a,b,c不能构成三角形");
}
}
}
class IllegalArgumentException extends Exception{
//默认构造器
public IllegalArgumentException() {
}
//自定义带参构造器
public IllegalArgumentException(String message) {
super(message);
}
- 编写一个计算N个学生分数平均分的程序。程序应该提示用户输入N的值,如何必须输入所有N个学生分数。如果用户输入的分数是一个负数,则应该抛出一个异常并捕获,提示“分数必须是正数或者0”。并提示用户再次输入该分数。
public class CalculateAverage {
@SuppressWarnings("resource")
public static void main(String[] args) {
//异常和Student类上面代码已经定义了,而且还在同一个包下,所有可以直接使用
Scanner Input = new Scanner(System.in);
int stu_num = 0;
try {
System.out.print("请输入您班的总人数:");
stu_num = Input.nextInt();
if(stu_num<0) {
throw new IllegalArgumentException("班级人数不能小于等于0");
}
}catch(IllegalArgumentException e){
e.printStackTrace();
}
System.out.println("一共有"+stu_num+"名学生");
Student[] student;
student = new Student[stu_num];
double total_grade = 0;
double stu_average = 0;
double grade = 0;
for(int i=0;i<student.length;i++) {
try {
System.out.print("请输入第"+(i+1)+"位学生的分数:");
grade = Input.nextDouble();
Student stu = new Student();
student[i] = stu;
student[i].setGrade(grade);
total_grade+=grade;
}catch(IllegalGradeException e) {
e.printStackTrace();
i--;
continue;
}
}
stu_average = total_grade/stu_num;
System.out.println("班级学生平均分为:"+stu_average);
Input.close();
}
}