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

本文演示了如何在Java中使用异常机制替代错误返回值,以提高代码可读性和错误处理效率。通过定义一个名为ArrayUtils的类,实现findMax方法寻找数组中的最大值,并在输入参数不合法时抛出IllegalArgumentException。示例代码展示了如何在main方法中捕获并处理这些异常,以及如何在输入非法时给出错误提示。

前言

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 = arr[begin];
        for (int i = begin; i < end; i++) {
            max = Math.max(max, arr[i]);
        }
        return max;
    }
}

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        double[] arr = new double[n];
        for (int i = 0; i < n; i++) {
            arr[i] = scanner.nextDouble();
        }
        while(scanner.hasNextInt()){
            int begin = scanner.nextInt();
            int end = scanner.nextInt();
            try{
                System.out.println(ArrayUtils.findMax(arr,begin,end));
            }catch (Exception e){
                System.out.println(e);
            }
        }
        try {
            System.out.println(ArrayUtils.class.getDeclaredMethod("findMax", double[].class,int.class,int.class));
        } catch (Exception e1) {
        }
    }
}
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值