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

如何实现Java多题型测验程序不输出true/false布尔值

解决测验题答案判断自定义输出的方案

嘿,我完全懂你的处境——没法修改Question.java和ChoiceQuestion.java里的public boolean CheckAnswer()方法,但又不想在判断答案时输出布尔值,而是要显示指定的"Correct answer :)"或"Wrong answer :("提示。别发愁,有两个简单的方案能搞定这个,完全不用动父类的代码:

方案一:在各题型子类中新增专属的输出方法

既然不能改父类的方法,那咱们就在每个自定义题型子类(AnyCorrectChoiceQuestion、FillInQuestion、NumericQuestion)里加一个专门用来处理输出的方法。这个方法内部调用父类的CheckAnswer()获取判断结果,再根据结果输出对应提示。

举个FillInQuestion的实现例子:

public class FillInQuestion extends Question {
    // 这里是你已有的子类代码,比如题干设置、答案存储逻辑等

    // 新增的答案检查并输出方法
    public void checkAndShowResult(String userAnswer) {
        boolean isCorrect = super.CheckAnswer(userAnswer);
        if (isCorrect) {
            System.out.println("Correct answer :)");
        } else {
            System.out.println("Wrong answer :(");
        }
    }
}

之后你在测验逻辑里,直接调用这个checkAndShowResult()方法就行,完全不会触发布尔值的输出。

方案二:用工具类统一处理所有题型

如果不想在每个子类里重复写代码,还可以创建一个独立的工具类,把答案检查和输出的逻辑封装进去,适配所有Question的子类。

比如创建QuestionResponseHandler类:

public class QuestionResponseHandler {
    // 静态方法,接收任意Question子类对象和用户答案
    public static void evaluateAndDisplay(Question question, String userInput) {
        // 针对NumericQuestion,先处理输入类型转换
        boolean isCorrect;
        if (question instanceof NumericQuestion) {
            try {
                double numericAnswer = Double.parseDouble(userInput);
                // 假设NumericQuestion的CheckAnswer重载了接收double的版本
                isCorrect = ((NumericQuestion) question).CheckAnswer(numericAnswer);
            } catch (NumberFormatException e) {
                // 输入不是有效数字,直接判定错误
                isCorrect = false;
            }
        } else {
            isCorrect = question.CheckAnswer(userInput);
        }
        
        // 输出自定义提示
        System.out.println(isCorrect ? "Correct answer :)" : "Wrong answer :(");
    }
}

使用的时候只需要一行代码:QuestionResponseHandler.evaluateAndDisplay(currentQuestion, userAnswer);,不管是哪种题型都能处理,还能顺便解决NumericQuestion的输入类型转换问题。

小提醒

  • 一定要确保你的测验逻辑里调用的是上述新方法,而不是直接调用父类的CheckAnswer(),不然还是会返回布尔值;
  • 如果NumericQuestion的CheckAnswer()方法接收的是数值类型(比如int/double),记得在处理用户输入时做好类型转换,避免报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:55:45