Java PTA——异常处理

2 篇文章 1 订阅

欢迎转载,如果转载请注明出处!!!

我的博客还有Java课程期末知识复习和总结呦~~~

教学代码看这里!!!MyInsCode-CSDN博客

目录

函数题

6-1 jmu-Java-06异常-finally

6-2 jmu-Java-06异常-多种类型异常的捕获

编程题

7-1 jmu-Java-06异常-02-使用异常机制处理异常输入

7-2 jmu-Java-06异常-03-throw与throws

7-3 成绩录入时的及格与不及格人数统计


函数题

6-1 jmu-Java-06异常-finally

代码中向系统申请资源,到最后都要将资源释放。

现有一Resource类代表资源类,包含方法:

  1. open(String str)打开资源,声明为抛出Exception(包含出错信息)。
  2. close()方法释放资源,声明为抛出RuntimeException(包含出错信息)

现在根据open(String str)中str的不同,打印不同的信息。str的内容分为4种情况:

  1. fail fail,代表open和close均会出现异常。打印open的出错信息与close的出错信息。
  2. fail success,代表open抛出异常,打印open出错信息。close正常执行,打印resource release success
  3. success fail ,代表open正常执行,打印resource open success。close抛出异常,打印close出错信息。
  4. 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方法:

  1. 输入n,创建大小为n的int数组。
  2. 输入n个整数,放入数组。输入时,有可能输入的是非整型字符串,这时候需要输出异常信息,然后重新输入。
  3. 使用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
方法说明:

  1. 要求begin<end,否则抛出相应的异常(IllegalArgumentException)。
  2. begin不得小于0,end不得大于arr.length,否则也抛出异常。

注意:抛出异常时,应让用户知道错误发生的原因。

main方法:

  1. 输入n,创建大小为n的int数组。
  2. 输入n个整数,放入数组。
  3. 输入若干对整数,代表begin与end,然后调用ArrayUtils.findMax方法。当输入的不是整数类型字符串,则退出输入循环。
  4. 最后使用如下代码打印标识信息

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;
	}
}

  • 46
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值