7.2 jmu-Java-06异常-02-使用异常机制处理异常输入 (5分)
Posted 阢Lana
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了7.2 jmu-Java-06异常-02-使用异常机制处理异常输入 (5分)相关的知识,希望对你有一定的参考价值。
7.2 jmu-Java-06异常-02-使用异常机制处理异常输入 (5分)
使用异常处理输入机制,让程序变得更健壮。
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]
查到两种做法
1.利用if else 直接输出
1 import java.lang.reflect.Array; 2 3 import java.util.*; 4 5 public class Main { 6 7 public static void main(String[] args) { 8 9 Scanner sc=new Scanner(System.in); 10 11 String s=sc.nextLine(); 12 13 int a[]=new int[Integer.valueOf(s)]; 14 15 for (int i=0;i<a.length;i++){ 16 17 String str=sc.nextLine(); 18 19 if (Character.isDigit(str.charAt(0))){ 20 21 a[i]=Integer.valueOf(str); 22 23 }else { 24 25 System.out.println("java.lang.NumberFormatException: For input string: ""+str+"""); 26 27 i--; 28 29 } 30 31 } 32 33 System.out.println(Arrays.toString(a)); 34 35 } 36 37 }
2.try catch
直接捕获异常
import java.util.*; public class Main{ public static void main(String[] args) { Scanner scan = new Scanner(System.in); int n=scan.nextInt(); int a[]=new int[n]; int count=0; while(count<n) { try { String temp=scan.next(); int i=Integer.parseInt(temp); a[count++]=i; }catch(Exception e) { System.out.println(e); } } System.out.println(Arrays.toString(a)); scan.close(); }}
7.3 jmu-Java-06异常-03-throw与throws (10分)
前言
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.2 jmu-Java-06异常-02-使用异常机制处理异常输入 (5分)的主要内容,如果未能解决你的问题,请参考以下文章
Azure Key Vault 机密访问间歇性地无法连接套接字异常
为啥我们在升级到 Core 2.1 和 Framework 4.7.2 后在 ServiceStack 中收到 TypeIntializer 异常?
Java -- 异常的捕获及处理 -- throws与throw关键字