异常用于处理程序运行期间发生的错误、意外或特殊情况。当程序遇到这些不可预见的情况时,它不会直接崩溃或终止,而是会抛出一个异常对象。异常处理机制通常包括三个关键部分:抛出异常,捕获异常,异常处理。
下面介绍两个题目:
1. 利用JOptionPane.showInputDialog()方法输入若干个学生成绩,-1表示结束输入,把输入的数据在数组int []score中,输出总分和平均分。在处理数组时,能同时捕捉数组下标越界异常IndexOutOfBoundException、算术异常ArithmeticException和数字格式转换异常NumberFormatException等异常。对每种不同的异常给出准确的提示信息,并利用合理的测试数据程序能够抛出这4种异常。
2. 某高速公路限速120公里/小时,自定义超速异常类OverSpeed抛出超速提示信息,自定义方法measureSpeed(double speed),如果速度speed超过120,该方法将抛出OverSpeed异常。在主方法中不停随机产生汽车行驶速度speed,并调用measureSpeed(double speed)方法测试是否超速。
第一题代码如下:
import java.util.Scanner;
public class StudentScores {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] scores = new int[10];
int totalScore = 0;
int count = 0;
System.out.println("请输入学生成绩(输入1结束):");
try {
while (true) {
String input = scanner.nextLine();
int score;
try {
score = Integer.parseInt(input);
if (score == 1) {
break;
}
if (count < scores.length) {
scores[count] = score;
totalScore += score;
count++;
} else {
System.out.println("成绩输入已满,无法再添加更多。");
break;
}
} catch (NumberFormatException e) {
System.out.println("错误:输入的不是有效的数字,请重新输入。");
}
if (input.equals("divideByZero")) {
int result = totalScore / 0; // 抛出ArithmeticException
}
}
if (count > 0) {
double average = (double) totalScore / count;
System.out.println("总分:" + totalScore);
System.out.println("平均分:" + average);
} else {
System.out.println("没有输入任何有效的成绩。");
}
} catch (ArithmeticException e) {
System.out.println("算术异常");
} finally {
scanner.close();
}
}
}
用户输入有效的整数成绩:用户每输入一个有效的整数后,该数会被添加到数组中,并累加到总分中。当用户输入-1时,循环结束,并计算平均分。最后,程序会显示总分和平均分。异常输入情况:如果用户输入的不是一个有效的整数,Integer.parseInt(input)将抛出NumberFormatException异常。捕获此异常后,程序会显示“输入的不是有效的整数,请重新输入!”的消息
第二题代码如下:
import java.util.Random;
class OverSpeedException extends Exception {
public OverSpeedException(String message) {
super(message);
}
}
public class SpeedMonitor {
public static void measureSpeed(double speed) throws OverSpeedException {
if (speed > 120) {
throw new OverSpeedException("超速!当前速度为 " + speed + " 公里/小时");
}
System.out.println("速度正常:当前速度为 " + speed + " 公里/小时");
}
public static void main(String[] args) {
Random rand = new Random();
for (int i = 0; i < 10; i++) { // 例如测试10次
double speed = rand.nextDouble() * 200; // 产生0到200之间的随机速度)
try {
measureSpeed(speed);
} catch (OverSpeedException e) {
System.err.println(e.getMessage());
}
}
}
}
车速正常的情况:当随机生成的车速在0到120公里/小时之间时,measureSpeed 方法将打印一条消息表示速度正常。
车速超速的情况:当随机生成的车速超过120公里/小时时,measureSpeed 方法将抛出一个 OverSpeedException 异常,并附带一个包含车速信息的异常消息。这个异常将被 main 方法中的 catch 块捕获,并打印异常消息。