You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java捕获自定义异常后修改无效测试分数输入的实现问题

解决异常后程序直接退出,实现修改无效输入的功能

我来帮你搞定这个问题!核心思路就是让程序在捕获到无效分数的异常后,不直接终止运行,而是提示用户重新输入合法的数值,直到得到有效的测试分数为止。下面是具体的实现方案:

1. 保留你的自定义异常类

你的InvalidTestScore异常类写得没问题,继续保留:

public class InvalidTestScore extends Exception { 
    public InvalidTestScore() { 
        super("Error: Invalid grade"); 
    } 
    public InvalidTestScore(int grade) { 
        super("Error: " + grade + " is invalid!"); 
    } 
}

2. 改造inputScores方法,加入异常捕获与循环重试逻辑

我们需要在获取每个分数的逻辑里加入循环,当捕获到异常时,提示用户重新输入,直到输入有效为止。同时还要处理用户输入非整数的情况(比如输入字符串),增强程序健壮性:

import java.util.InputMismatchException;
import java.util.Scanner;

public class ScoreInputHandler {

    /* 获取测试分数 */ 
    public static int[] inputScores(int amount) {
        Scanner scanner = new Scanner(System.in);
        int[] scores = new int[amount];

        for (int i = 0; i < amount; i++) {
            boolean isScoreValid = false;
            // 循环直到输入有效分数
            while (!isScoreValid) {
                try {
                    System.out.print("请输入第" + (i + 1) + "个测试分数: ");
                    int score = scanner.nextInt();
                    // 验证分数范围,不合法则抛出自定义异常
                    if (score < 0 || score > 100) {
                        throw new InvalidTestScore(score);
                    }
                    // 输入有效,存入数组并退出循环
                    scores[i] = score;
                    isScoreValid = true;
                } catch (InvalidTestScore e) {
                    // 捕获自定义异常,提示错误信息
                    System.out.println(e.getMessage());
                    scanner.nextLine(); // 清除缓冲区的无效输入,避免死循环
                } catch (InputMismatchException e) {
                    // 捕获非整数输入的异常
                    System.out.println("Error: 请输入有效的整数分数!");
                    scanner.nextLine(); // 清除缓冲区的非整数输入
                }
            }
        }
        scanner.close();
        return scores;
    }

    // 测试主方法
    public static void main(String[] args) {
        int[] testScores = inputScores(3);
        System.out.println("你输入的有效分数为:");
        for (int score : testScores) {
            System.out.print(score + " ");
        }
    }
}

3. 关键逻辑说明

  • 循环重试:用while循环配合isScoreValid标志,只有当输入有效分数时才退出当前分数的输入循环。
  • 异常捕获:
    • 捕获自定义的InvalidTestScore异常,提示用户输入的分数不合法。
    • 捕获InputMismatchException,处理用户输入非整数的情况,避免程序崩溃。
  • 缓冲区清理:每次捕获异常后调用scanner.nextLine(),清除输入缓冲区里的无效内容,防止下一次输入直接读取到之前的无效值导致死循环。

这样修改后,程序在遇到无效输入时不会直接退出,而是持续提示用户重新输入,直到得到合法的测试分数为止。

内容的提问来源于stack exchange,提问作者logitech2321

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:09:54