速(尚)学堂第六章Java异常机制章末作业自写答案

速(尚)学堂第六章Java异常机制章末作业自写答案

第二次在CSDN发文章,正在学JAVA,学习了第六章后,对章末作业做了解答,全部手工自己写的,选择题也有一些自己的看法,如有错误欢迎指正,共同进步,高手勿喷,见笑了。

选择题
1.C //try语句块中没有出现异常情况,所以不会跳转到catch语句块中。finally语句块无论try中是否有异常,都会执行且只能有一个finally,用于释放资源、关闭文件等。故选C。注:try中有个return,若finally语句之后还有其他语句,则也不会执行了,return的两个作用:一是终止方法,二是返回值。

2.C //由第一题解答易知选C。

3.AC //语句1的throw应为throws,语句3的throws应为throw。故选AC。throw代表动作,表示抛出一个异常的动作;throws代表一种状态,代表方法可能有异常抛出;throw用在方法实现中,而throws用在方法声明中;throw只能用于抛出一种异常,而throws可以抛出多个异常。由语句结构还可以知道该自定义异常继承了Exception(CheckedException)。

4.BC //此题个人来看没啥技巧,记住一些常见的异常类型就行。
(Exception)ChechedException:ClassNotFound、FileNotFound、IOException、NoSuchMethod、WriteAbortedException等
运行时(Runtime)异常:Arithmetic、NullPointer、ClassCast、ArrayIndexOutOf、NoSuchElement等。

5.B //输入-1,try语句块的if条件满足,抛出自定义的异常,显示提示信息“必须在1~4之间”。故选B

编码题

  1. 编写程序接收用户输入分数信息,如果分数在0—100之间,输出成绩。如果成绩不在该范围内,抛出异常信息,提示分数必须在0—100之间。
    要求:使用自定义异常实现。
package Practice5;

/**
 * 编写程序接收用户输入分数信息,如果分数在0—100之间,输出成绩。
 * 如果成绩不在该范围内,抛出异常信息,提示分数必须在0—100之间。
 * @author 皮
 *
 */
public class FinalTest {
	public static void main(String[] args) {
		Score score = new Score();
		score.setScore(12);//传入分数
		score.setScore(-3);

	}
}
class Score{
	
	private int score;
	//因为score是私有成员变量,设置相应的get/set方法可以访问它
	public int getScore() {
		return score;
	}

	public void setScore(int score) {
		this.score = score;
		if(score>100||score<0) {
			try {				
				throw new Warning("输入的分数需要在0到100之间!!!");
			}catch(Warning e) {
				e.printStackTrace();
			}
		}else {
			System.out.println("你输入的分数为:"+score);
		}
	}
	
	
}
class Warning extends Exception{//继承了Exception,为CheckedException,也可以继承RuntimeException
	/*
	 * 自定义的异常包含两部分
	 * 1.无参构造器
	 * 2.带有提示信息的构造器
	 */
	//无参构造器
	public Warning() {
		
	}
	//带信息的构造器
	public Warning(String msg) {
		super(msg);
	}
}


运行结果
运行结果

  1. 写一个方法void isTriangle(int a,int b,int c),判断三个参数是否能构成一个三角形, 如果不能则抛出异常IllegalArgumentException,显示异常信息 “a,b,c不能构成三角形”,如果可以构成则显示三角形三个边长,在主方法中得到命令行输入的三个整数, 调用此方法,并捕获异常。
package Practice5;

/**
 *  写一个方法void isTriangle(int a,int b,int c),判断三个参数是否能构成一个三角形,
 *  如果不能则抛出异常IllegalArgumentException,显示异常信息 “a,b,c不能构成三角形”,
 *  如果可以构成则显示三角形三个边长,在主方法中得到命令行输入的三个整数, 调用此方法,并捕获异常。
 * @author 皮
 *
 */
public class FinalTest2 {
	public static void main(String[] args) {
		Triangle triangle = new Triangle();
		triangle.isTriangle(3, 4, 5);
		triangle.isTriangle(3, 4, 10);//传入三个参数
	}
	
}
class Triangle{
	int a;
	int b;
	int c;
	//定义含有三个参数的方法,a,b,c用于接收三条边
	public void isTriangle(int a,int b,int c) {
		if(a+b<=c||a+c<=b||b+c<=a) {
			throw new IllegalArgumentException("a,b,c不能构成三角形");
		}else {
			System.out.println("这三个数可以构成三角形,三条边a,b,c分别为:"+a+"、"+b+"、"+c);			
		}
	}
}

class IllegalArgumentException extends RuntimeException{//继承了RuntimeException,上面的第24行就不用再处理了
	//默认的构造器
	public IllegalArgumentException() {
		
	}
	//带提示信息的构造器
	public IllegalArgumentException(String msg) {
		super(msg);
	}
	
}

运行结果:
运行结果

  1. 编写一个计算N个学生分数平均分的程序。程序应该提示用户输入N的值,如何必须输入所有N个学生分数。如果用户输入的分数是一个负数,则应该抛出一个异常并捕获,提示“分数必须是正数或者0”。并提示用户再次输入该分数。
package Practice5;

import java.util.InputMismatchException;
import java.util.Scanner;
/**
 * 编写一个计算N个学生分数平均分的程序。
 * 程序应该提示用户输入N的值,如何必须输入所有N个学生分数。
 * 如果用户输入的分数是一个负数,则应该抛出一个异常并捕获,提示“分数必须是正数或者0”。并提示用户再次输入该分数。
 * @author 皮
 *
 */
public class FinalTest3 {
	public static void main(String[] args) {
		StuScore stuScore = new StuScore();
		stuScore.averageScore();
	}
}
//定义学生成绩类
class StuScore{
	Scanner scanner = new Scanner(System.in);
	//求平均分的方法
	public void averageScore() {
		int sum = 0;
		System.out.println("请输入你有几个学生的成绩:");
		int i = scanner.nextInt();
		//如果学生成绩的个数为负数则处理异常,提示“请输入正确的学生成绩个数!”
		try {
			if(i<=0) {
				throw new IllegalStudentException("请输入正确的学生成绩个数!");	
			}
		}catch(IllegalStudentException e) {
				e.printStackTrace();
				return;//若没有此句的话,成绩个数为0的时候,下面会出现除数为0的异常
		}catch(InputMismatchException e) {
			System.out.println(e.getMessage());
		}
		for(int b = 0;b<i;b++) {
			System.out.println("请输入第"+(b+1)+"个学生的成绩:");
			int j = scanner.nextInt();
			//若学生成绩小于0时,处理异常,提示“学生成绩不能为负数!”
			if(j<0) {
				try {
					throw new IllegalScoreException("学生成绩不能为负数!");					
				}catch(IllegalScoreException e) {
				     e.printStackTrace();
				     return;
				}
			}
			sum += j;
		}
		System.out.println("你输入的"+i+"个学生的平均成绩为:"+(sum/i));
	}
}
/*
 * 定义了两个异常用于提示学生成绩的个数和成绩的合法
 */
class IllegalStudentException extends Exception{
	public IllegalStudentException () {
		
	}
	public IllegalStudentException(String msg) {
		super(msg);
	}
}
class IllegalScoreException extends Exception{
	public IllegalScoreException() {
		
	}
	public IllegalScoreException(String msg) {
		super(msg);
	}
	
}

运行结果:
运行结果

运行结果2

运行结果3

运行结果4

这里只实现了基本的功能,还没有完善,如有兴趣可以学会使用IO流来进一步完善,如判断输入的学生个数不能为小数和其他字符,输入的成绩不能为其他字符

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值