PTA 7-1 测试抛出异常 (20 分) Java
尝试构造类ArrayUtil,该类的方法int findMax(int[] arr, int begin, int end)能抛出IllegalArgumentException(表示参数错误)的方法。 正常执行要求begin<=end
如果begin>=end,抛出异常(IllegalArgumentException),异常信息为 “begin:x >= end:x”
如果begin<0,抛出异常(IllegalArgumentException),异常信息为 “begin:x < 0”
如果end>arr.length,抛出异常(IllegalArgumentException),异常信息为 “end:x > arr.length”
要求在findMax方法声明处声明此异常,在main函数里要捕获此异常,并输出异常类型(可用obj.getClass().getName())和异常信息
输入格式:
输入n,表示int数组大小
输入n个整数,放入数组。
输入m,表示begin和end的对数
输入m对整数,代表begin与end,然后调用ArrayUtils.findMax方法。
输出格式:
异常信息
数组的最大值
输入样例:
在这里给出一组输入。例如:
5
1 2 3 4 5
6
0 5
3 3
3 4
3 2
-1 3
0 6
输出样例:
在这里给出相应的输出。例如:
5
java.lang.IllegalArgumentException: begin:3 >= end:3
4
java.lang.IllegalArgumentException: begin:3 >= end:2
java.lang.IllegalArgumentException: begin:-1 < 0
java.lang.IllegalArgumentException: end:6 > arr.length
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n,m;
n = sc.nextInt();
int a[] = new int[n];
for(int i=0;i<n;i++)
a[i]=sc.nextInt();
m = sc.nextInt();
int begin,end;
for(int i=0;i<m;i++) {
begin = sc.nextInt();
end = sc.nextInt();
try {
ArrayUtil p = new ArrayUtil();
System.out.println(p.findMax(a, begin, end));
}catch (IllegalArgumentException e) {
// TODO: handle exception
System.out.println(e);
}
}
sc.close();
}
}
class ArrayUtil{
public ArrayUtil() {
}
public int findMax(int[] 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");
else {
int max = arr[begin];
for(int i=begin;i<end;i++)
if(arr[i]>max)
max=arr[i];
return max;
//这里特别说明一点,在找所给区间内的最大值的时候不能用Arrays.sort()对数组排序然后拿最后一个
//因为我发现在一次排序完毕后,以后的arr数组都是接着之前已经排好了的
//我自己不知道是什么原因,反正是被这个地方坑了(泪目)
}
}
}