实验八 异常处理
1. 编写一个程序,要求从键盘输入一个圆的半径(double类型),计算并输出圆的面积。在没有加入异常处理机制时,输入的数据不是double型数据(如字符串“abc”)会产生什么结果?加入异常处理机制后,让程序在输入不正确的类型数据时给出错误提示并要求重新输入。
import java.util.InputMismatchException;
import java.util.Scanner;
public class Text1 {
final static double PI=3.14;
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
double r=0;
boolean inputIsVaild=false;
while(!inputIsVaild){
try{
System.out.println("请输入圆的半径");
r=Double.parseDouble(input.nextLine());
inputIsVaild=true;
}catch (NumberFormatException e){
System.out.println("输入的数据类型不是double类型,请重试");
}
}
double area=r*r*PI;
System.out.println(area);
}
2. 分析下面的程序。
(1)程序在运行时会产生哪些异常?怎样捕获并处理异常?
(2)修改代码:不管程序在执行过程中会不会产生异常,最后都输出“程序运行结束”。
import java.util.Scanner;
public class ExceptionSample {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int a[]=new int[5];
int n,sum=0;
int average;
n=sc.nextInt();
for(int i=0;i<n;i++){
a[i]=sc.nextInt();
sum=sum+a[i];
}
average=sum/n;
System.out.println(average);
}
}
import java.util.Scanner;
import java.util.InputMismatchException;
public class Text2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
try {
int a[] = new int[5];
int n, sum = 0;
int average;
n = sc.nextInt();
for (int i = 0; i < n; i++) {
a[i] = sc.nextInt();
sum = sum + a[i];
}
average = sum / n;
System.out.println(average);
} catch (InputMismatchException e) {
System.out.println("输入的数据格式不符合要求!");
} catch (ArithmeticException e) {
System.out.println("除0异常!");
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("数组格式异常!");
} finally {
System.out.println("程序运行异常!");
}
}
}
3、设计一个程序,输入两个整数和一个算术运算符(+、-、*、/),根据运算符,计算两个整数的运算结果。考虑到用户输入的数据不合法,需要捕获异常(数据格式异常、除零异常)。
import java.util.InputMismatchException;
import java.util.Scanner;
public class Text1 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int a=input.nextInt();
int b=input.nextInt();
String str=input.nextLine();
try {
if (str.equals("+")) {
System.out.println("相加为:" + (a + b));
}
if (str.equals("-")) {
System.out.println("相减为:" + (a - b));
}
if (str.equals("*")) {
System.out.println("相乘为:" + (a * b));
}
if (str.equals("+")) {
System.out.println("相除为:" + (a / b));
}
}
catch (ArithmeticException e){
System.out.println("除0异常!");
}catch (InputMismatchException e) {
System.out.println("数据格式异常!");
}
}
}
4、设计一个程序,根据三角形的三边求三角形面积。要求自定义一个异常类IllegaException,在求面积的方法area()中声明抛出这个异常类型,当从键盘输入三条边的数据不能构成三角形时抛出异常。
import java.util.InputMismatchException;
import java.util.Scanner;
class IllegaException extends Exception {
public IllegaException(String msg) {
super(msg);
}
}
public class Text2 {
public static void main(String[] args) throws IllegaException {
Scanner input = new Scanner(System.in);
try {
System.out.println("请输入第一条边:");
double x = input.nextDouble();
System.out.println("请输入第二条边:");
double y = input.nextDouble();
System.out.println("请输入第三条边:");
double z = input.nextDouble();
double p = (x + y + z) / 2;
double area=area(x,y,z);
System.out.println("三角形的面积为:"+ area);
}catch(IllegaException e){
System.out.println("异常信息:" + e.getMessage());
} catch (Exception e) {
System.out.println("输入数据不合法!");
}
}
public static double area(double a, double b, double c) throws IllegaException {
if (a + b <= c || a + c <= b || b + c <= a) {
throw new IllegaException("三条边无法构成三角形!");
}
double p = (a + b + c) / 2;
return Math.sqrt(p * (p - a) * (p - b) * (p - c));
}
}