Java 异常处理

异常用于处理程序运行期间发生的错误、意外或特殊情况。当程序遇到这些不可预见的情况时,它不会直接崩溃或终止,而是会抛出一个异常对象。异常处理机制通常包括三个关键部分:抛出异常,捕获异常,异常处理。

下面介绍两个题目:

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 块捕获,并打印异常消息。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值