实验目的
1.了解Java中常见的异常。
2.掌握自定义异常的方法。
3.了解如何在方法中抛出异常。
实验内容
1. 编写一个程序,要求从键盘输入一个圆的半径(double类型),计算并输出圆的面积。在没有加入异常处理机制时,输入的数据不是double型数据(如字符串“abc”)会产生什么结果?加入异常处理机制后,让程序在输入不正确的类型数据时给出错误提示并要求重新输入。
源代码:
import java.util.InputMismatchException;
import java.util.Scanner;
public class test {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
try {
double r=sc.nextDouble();
double s=3.14*r*r;
System.out.println("圆的面积为:"+s);
}catch(InputMismatchException e) {
System.out.println("请以正确的形式输出");
}
}
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
修改后代码:
import java.util.InputMismatchException;
import java.util.Scanner;
public class test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a[] = new int[5];
int n, sum = 0;
int average;
try {
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异常!");
}finally {
System.out.println("程序运行结束");
}
sc.close();
}
}
3. 设计一个程序,输入两个整数和一个算术运算符(+、-、*、/),根据运算符,计算两个整数的运算结果。考虑到用户输入的数据不合法,需要捕获异常(数据格式异常、除零异常)。
源代码:
import java.util.Scanner;
public class test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num1, num2;
try {
num1 = Integer.parseInt(sc.nextLine());
} catch (NumberFormatException e) {
System.out.println("输入格式错误,请输入整数!");
return;
}
try {
num2 = Integer.parseInt(sc.nextLine());
} catch (NumberFormatException e) {
System.out.println("输入格式错误,请输入整数!");
return;
}
String operator = sc.nextLine();
if (!operator.equals("+") &&
!operator.equals("-") &&
!operator.equals("*")
&&
!operator.equals("/")) {
System.out.println
("输入的运算符不合法,请输入+、-、*、/中的一个!");
return;
}
int result = 0;
try {
switch (operator) {
case "+":
result = num1 + num2;
break;
case "-":
result = num1 - num2;
break;
case "*":
result = num1 * num2;
break;
case "/":
if (num2 == 0) {
System.out.println("除数不能为零!");
return;
}
result = num1 / num2;
break;
}
System.out.println("结果为:" + result);
} catch (Exception e) {
System.out.println("发生异常:" + e.getMessage());
} finally {
System.out.println("程序运行结束!");
}
}
}
4. 设计一个程序,根据三角形的三边求三角形面积。要求自定义一个异常类IllegaException,在求面积的方法area()中声明抛出这个异常类型,当从键盘输入三条边的数据不能构成三角形时抛出异常。
源代码:
import java.util.Scanner;
class IllegaException extends Exception {
public IllegaException(String message) {
super(message);
}
}
public class test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入三角形的三条边:");
double a = scanner.nextDouble();
double b = scanner.nextDouble();
double c = scanner.nextDouble();
try {
double area = getTriangleArea(a, b, c);
System.out.println("三角形的面积为:" + area);
} catch (IllegaException e) {
System.out.println("输入的三条边无法构成三角形!");
}
}
public static double getTriangleArea(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;
double area = Math.sqrt(p * (p - a) * (p - b) * (p - c));
return area;
}
}