速(尚)学堂第六章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
编码题
- 编写程序接收用户输入分数信息,如果分数在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);
}
}
运行结果
- 写一个方法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);
}
}
运行结果:
- 编写一个计算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);
}
}
运行结果:
这里只实现了基本的功能,还没有完善,如有兴趣可以学会使用IO流来进一步完善,如判断输入的学生个数不能为小数和其他字符,输入的成绩不能为其他字符