Java测验应用多选题输出Null值问题求助
Java测验应用多选题显示Null问题修复方案
问题原因
- 多选题实例创建后,选项数组
newchoice从未被填充,始终是null。 initQuestion()方法里错误调用了未实现的addChoices()方法,而非正确的addChoice()方法。- 直接用数组默认toString输出,格式生硬且暴露
null值。
修复代码及说明
修改后的MultipleChoiceQuestion.java
import java.util.Arrays; public class MultipleChoiceQuestion extends Question { private int count = 0; private final String[] newchoice = new String[4]; public MultipleChoiceQuestion(String text, String cho1, boolean bool1, String cho2, boolean bool2, String cho3, boolean bool3, String cho4, boolean bool4) { super(text); // 直接调用addChoice填充选项,无需额外存储cho1-cho4变量 addChoice(cho1, bool1); addChoice(cho2, bool2); addChoice(cho3, bool3); addChoice(cho4, bool4); } public void addChoice(String choice, boolean isCorrect) { if (count < newchoice.length) { this.newchoice[count] = choice; if (isCorrect) { super.setCorrectResponse(choice); } count++; } } @Override public String toString() { StringBuilder sbf = new StringBuilder(super.toString()); sbf.append("\n"); // 用A、B、C、D编号显示选项,替代数组默认格式 char optionLabel = 'A'; for (String choice : newchoice) { if (choice != null) { sbf.append(optionLabel).append(". ").append(choice).append("\n"); optionLabel++; } } return sbf.toString(); } }
关键修改点
- 移除了冗余的
cho1-cho4、bool1-bool4变量和无用的initQuestion()、addChoices()方法,直接在构造函数中调用addChoice()填充选项。 - 优化
toString()方法,生成带A/B/C/D编号的选项列表,避免显示null。 - 在
addChoice()中增加数组边界判断,防止索引越界。
主类QuizTester.java无需额外修改
创建MultipleChoiceQuestion实例时,构造函数已完成选项初始化,直接调用toString()即可显示完整题目和选项。
测试后,第4、5题会正常显示所有选项,不再出现null值。
内容的提问来源于stack exchange,提问作者zetalo
相关产品推荐
相关产品推荐

