欢迎转载,如果转载请注明出处!!!
我的博客还有Java课程期末知识复习和总结呦~~~
教学代码看这里!!!MyInsCode-CSDN博客
目录
7-1 jmu-Java-06异常-02-使用异常机制处理异常输入
7-2 jmu-Java-06异常-03-throw与throws
函数题
6-1 jmu-Java-06异常-finally
代码中向系统申请资源,到最后都要将资源释放。
现有一Resource
类代表资源类,包含方法:
open(String str)
打开资源,声明为抛出Exception
(包含出错信息)。close()方法
释放资源,声明为抛出RuntimeException
(包含出错信息)
现在根据open(String str)
中str的不同,打印不同的信息。str的内容分为4种情况:
fail fail
,代表open和close均会出现异常。打印open的出错信息与close的出错信息。fail success
,代表open抛出异常,打印open出错信息。close正常执行,打印resource release success
success fail
,代表open正常执行,打印resource open success
。close抛出异常,打印close出错信息。success success
,代表open正常执行,打印resource open success
,close正常执行打印resource release success
。
注1:你不用编写打印出错信息的代码。
注2:捕获异常后使用System.out.println(e)
输出异常信息,e是所产生的异常。
裁判测试程序:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Resource resource = null;
try{
resource = new Resource();
resource.open(sc.nextLine());
/*这里放置你的答案*/sc.close();
}
输入样例:
success success
输出样例:
resource open success
resource release success
函数体如下:
System.out.println("resource open success");
}catch(Exception e){
System.out.println(e);
}
try{
resource.close();
System.out.println("resource release success");
}catch(RuntimeException e){
System.out.println(e);
}
6-2 jmu-Java-06异常-多种类型异常的捕获
如果try块中的代码有可能抛出多种异常,且这些异常之间可能存在继承关系,那么在捕获异常的时候需要注意捕获顺序。
补全下列代码,使得程序正常运行。
裁判测试程序:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String choice = sc.next();
try {
if (choice.equals("number"))
throw new NumberFormatException();
else if (choice.equals("illegal")) {
throw new IllegalArgumentException();
} else if (choice.equals("except")) {
throw new Exception();
} else
break;
}
/*这里放置你的答案*/
}//end while
sc.close();
}
###输出说明
在catch
块中要输出两行信息:
第1行:要输出自定义信息。如下面输出样例的number format exception
第2行:使用System.out.println(e)
输出异常信息,e是所产生的异常。
输入样例:
number illegal except quit
输出样例:
number format exception
java.lang.NumberFormatException
illegal argument exception
java.lang.IllegalArgumentException
other exception
java.lang.Exception
在这里我们仅仅需要填补catch块。
函数体如下:
catch(Exception e){
if (choice.equals("number"))
System.out.println ("number format exception");
if (choice.equals("illegal"))
System.out.println ("illegal argument exception");
if (choice.equals("except"))
System.out.println ("other exception");
System.out.println (e);
}
编程题
7-1 jmu-Java-06异常-02-使用异常机制处理异常输入
使用异常处理输入机制,让程序变得更健壮。
main方法:
- 输入n,创建大小为n的int数组。
- 输入n个整数,放入数组。输入时,有可能输入的是非整型字符串,这时候需要输出异常信息,然后重新输入。
- 使用
Arrays.toString
输出数组中的内容。
输入样例:
5
1
2
a
b
4
5
3
输出样例:
java.lang.NumberFormatException: For input string: "a"
java.lang.NumberFormatException: For input string: "b"
[1, 2, 4, 5, 3]
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int []a=new int[n];
int num=0;
for(int i=0;i<n;i++)
{
String s = sc.next();
try {
int t = Integer.parseInt(s);
a[num] = t;
num++;
}catch(Exception e)
{
System.out.println(e);
i--;
}
}
System.out.println(Arrays.toString(a));
}
}
7-2 jmu-Java-06异常-03-throw与throws
前言
C语言中一般通过返回错误代码来表示一个函数执行是否有误。然而有的时候错误返回值可能与正常值相混淆。
Java中使用异常来表示程序运行中发生的错误。本实验的主要目的为了演示使用异常机制替代错误返回值。
题目内容
编写类ArrayUtils
方法:public static double findMax(double[] arr,int begin, int end)
方法功能:用来返回arr数组中在下标begin与end-1之间(包括end-1)的最大值。
注意:必须使用throws关键字声明findMax。
方法说明:
- 要求begin<end,否则抛出相应的异常(
IllegalArgumentException
)。 - begin不得小于0,end不得大于arr.length,否则也抛出异常。
注意:抛出异常时,应让用户知道错误发生的原因。
main方法:
- 输入n,创建大小为n的int数组。
- 输入n个整数,放入数组。
- 输入若干对整数,代表begin与end,然后调用
ArrayUtils.findMax
方法。当输入的不是整数类型字符串,则退出输入循环。 - 最后使用如下代码打印标识信息
try {
System.out.println(ArrayUtils.class.getDeclaredMethod("findMax", double[].class,int.class,int.class));
} catch (Exception e1) {
}
输入样例:
5
1 3 5 6 8
0 5
3 3
3 4
3 2
-1 3
0 6
end
输出样例:
8.0
java.lang.IllegalArgumentException: begin:3 >= end:3
6.0
java.lang.IllegalArgumentException: begin:3 >= end:2
java.lang.IllegalArgumentException: begin:-1 < 0
java.lang.IllegalArgumentException: end:6 > arr.length
//这里是标识信息
代码段如下:
import java.util.Scanner;
class ArrayUtils{
public static double findMax(double[] arr,int begin, int end)throws IllegalArgumentException{
if(begin>=end) {
throw new IllegalArgumentException("begin:"+begin+" >= end:"+end);
}
else if(begin<0){
throw new IllegalArgumentException("begin:"+begin+" < 0");
}
else if(end>arr.length){
throw new IllegalArgumentException("end:"+end+" > arr.length");
}
double max=0;
for(int i=begin;i<end;i++){
if(max<arr[i])
max=arr[i];
}
return max;
}
}
public class Main{
public static void main(String argn[]){
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
double[] arr =new double[n];
for(int i=0;i<n;i++){
arr[i]=scan.nextInt();
}
while(true){
int begin,end;
int m=0;
ArrayUtils hsj[] =new ArrayUtils[100];
hsj[m++]=new ArrayUtils();
try{
begin = Integer.parseInt(scan.next());
end = Integer.parseInt(scan.next());
} catch(NumberFormatException e){
break;
}
try {
System.out.println(hsj[m].findMax(arr,begin,end));
} catch (IllegalArgumentException e) {
System.out.println(e.toString());
}
}
try {
System.out.println(ArrayUtils.class.getDeclaredMethod("findMax", double[].class,int.class,int.class));
} catch (Exception e1) {
}
}
}
7-3 成绩录入时的及格与不及格人数统计
编写一个程序进行一个班某门课程成绩的录入,能够控制录入成绩总人数,对录入成绩统计其及格人数和不及格人数。设计一个异常类,当输入的成绩小0分或大于100分时,抛出该异常类对象,程序将捕捉这个异常对象,并调用执行该异常类对象的toString()方法,该方法获取当前无效分数值,并返回一个此分数无效的字符串。
输入格式:
从键盘中输入学生人数n
从键盘中输入第1个学生的成绩
从键盘中输入第2个学生的成绩
...
从键盘中输入第n个学生的成绩
(注:当输入的成绩无效时(即分数为小于0或大于100)可重新输入,且输出端会输出此分数无效的提醒。)
输出格式:
显示及格总人数
显示不及格总人数
输入样例:
在这里给出一组输入。例如:
3
100
30
60
输出样例:
200invalid!
1
1
代码段如下:
import java.util.Scanner;
public class Main{
public static void main(String[] args) throws ScoreException{
Scanner sc = new Scanner(System.in);
int m = 0;
int n = sc.nextInt();
int a = 0;
int b = 0;
for(int i = 0;i < n;i++){
try{
m = sc.nextInt();
if(m < 0 || m > 100)
throw new ScoreException("invalid!");
else{
if(m>=60)
a++;
else
b++;
}
}
catch(ScoreException e){
System.out.println(m + e.toString());
i = i - 1;
}
}
System.out.println(a);
System.out.println(b);
}
}
class ScoreException extends Exception{
String message;
public ScoreException(String message){
this.message = message;
}
public String toString(){
return this.message;
}
}