使用异常处理输入机制,让程序变得更健壮。
main方法:
- 输入n,创建大小为n的int数组。
- 输入n个整数,放入数组。输入时,有可能输入的是非整型字符串,这时候需要输出异常信息,然后重新输入。
- 使用
Arrays.toString
输出数组中的内容。
输入样例:
1. 5 2. 1 3. 2 4. a 5. b 6. 4 7. 5 8. 3
输出样例:
1. java.lang.NumberFormatException: For input string: "a" 2. java.lang.NumberFormatException: For input string: "b" 3. [1, 2, 4, 5, 3]
import java.util.*; public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); int n = cin.nextInt(); int cnt = 0; int[] a = new int[n]; while (cnt < n) { try { String x = cin.next(); int t = Integer.parseInt(x); a[cnt++] = t; }catch(Exception e) { System.out.println(e); } } System.out.println(Arrays.toString(a)); } }
R7-2 天不假年
程序填空题。根据题目要求完善下面的代码。请提交完整代码。
今年50,明年18”是一个美好的愿望。人的年龄只能不断增长。
Person类的setAge方法用于更新年龄。
如果新的年龄比原来的年龄小,则输出B表示发现异常,否则输出A表示正常。
import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner in = new Scanner(System.in); int age; age = in.nextInt(); Person p = new Person(age); age = in.nextInt(); try{ p.setAge(age); }catch(AgeException e){ } } } class Person{ int age; public Person(int age){ this.age = age; } public void setAge(int age) throws AgeException { if(this.age <=age){ this.age = age; }else{ throw new AgeException(); } } } class AgeException extends Exception{ }
输入格式:
输入在一行中给出2个绝对值不超过100的正整数A和B。
输出格式:
在一行中输出一个字符A或者B。
输入样例:
50 18
输出样例:
B
import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner in = new Scanner(System.in); int age; age = in.nextInt(); Person p = new Person(age); age = in.nextInt(); try{ p.setAge(age); System.out.println("A"); }catch(AgeException e){ System.out.println("B"); } } } class Person{ int age; public Person(int age){ this.age = age; } public void setAge(int age) throws AgeException { if(this.age <=age){ this.age = age; }else{ throw new AgeException(); } } } class AgeException extends Exception{ }
R7-3 成绩录入时的及格与不及格人数统计
编写一个程序进行一个班某门课程成绩的录入,能够控制录入成绩总人数,对录入成绩统计其及格人数和不及格人数。设计一个异常类,当输入的成绩小0分或大于100分时,抛出该异常类对象,程序将捕捉这个异常对象,并调用执行该异常类对象的toString()方法,该方法获取当前无效分数值,并返回一个此分数无效的字符串。
输入格式:
从键盘中输入学生人数n
从键盘中输入第1个学生的成绩
从键盘中输入第2个学生的成绩
...
从键盘中输入第n个学生的成绩
(注:当输入的成绩无效时(即分数为小于0或大于100)可重新输入,且输出端会输出此分数无效的提醒。)
输出格式:
显示及格总人数
显示不及格总人数
输入样例:
在这里给出一组输入。例如:
1. 3 2. 100 3. 30 4. 60
输出样例:
在这里给出相应的输出。例如:
1. 2 2. 1
输入样例:
在这里给出一组输入。例如:
1. 2 2. 200 3. 69 4. 30
输出样例:
在这里给出相应的输出。例如:
1. 200invalid! 2. 1 3. 1
import java.util.*; public class Main{ public static void main(String[] args) { Scanner in=new Scanner(System.in); int n=in.nextInt(); int sum1=0,sum2=0; int []s=new int[n]; for(int i=0;i<n;i++) { int m=in.nextInt(); if(m>100||m<0) { System.out.println(m+"invalid!"); i--; continue; } else s[i]=m; if(m<60) sum1+=1; else sum2+=1; } System.out.println(sum2); System.out.println(sum1); } }
R7-4 测试抛出异常
尝试构造类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.*; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner in=new Scanner(System.in); int n=in.nextInt(); int[] a=new int[n]; for(int i=0;i<n;i++){ a[i]=in.nextInt(); } int m=in.nextInt(); ArrayUtil aaa=new ArrayUtil(); for(int i=0;i<m;i++){ int low=in.nextInt(); int high=in.nextInt(); aaa.findMax(a,low,high); } } } class ArrayUtil{ public ArrayUtil() {//构造函数 } public void findMax(int[] arr, int begin, int end) { if(begin>=end) { System.out.println("java.lang.IllegalArgumentException: begin:"+begin+" >= end:"+end); }else if(begin<0) { System.out.println("java.lang.IllegalArgumentException: begin:"+begin+" < 0"); }else if(end>arr.length) { System.out.println("java.lang.IllegalArgumentException: end:"+end+" > arr.length"); }else{ int max=-9999; for(int i=begin;i<end;i++) { if(arr[i]>max) { max=arr[i]; } } System.out.println(max); } } }