如何设计Java问答类?解决多问题存储及选项展示优化需求
优化实现方案
1. 重构Question类
原类仅存储题目和答案编号,缺少选项信息无法展示交互菜单。重构后让每个问题自带选项列表和正确选项索引,贴合需求:
public class Question { private final String questionText; private final List<String> options; private final int correctOptionIndex; // 选项索引从1开始,符合用户输入习惯 public Question(String questionText, List<String> options, int correctOptionIndex) { this.questionText = questionText; this.options = options; this.correctOptionIndex = correctOptionIndex; } // Getter方法 public String getQuestionText() { return questionText; } public List<String> getOptions() { return options; } public int getCorrectOptionIndex() { return correctOptionIndex; } }
2. 消除问题存储冗余
不再逐个创建Question对象并手动添加,通过批量初始化构建问题集合,支持轻松扩展到30个问题:
// 初始化问题列表,直接追加即可添加新问题 private static final List<Question> EASY_QUESTIONS = Arrays.asList( new Question("Who is the best NBA player?", Arrays.asList("LeBron James", "Michael Jordan", "Kobe Bryant"), 2), new Question("Who is the best Football player?", Arrays.asList("Lionel Messi", "Cristiano Ronaldo", "Neymar"), 1), new Question("Who is the best Hockey player?", Arrays.asList("Wayne Gretzky", "Mario Lemieux", "Sidney Crosby"), 1), new Question("Who is the best Tennis player?", Arrays.asList("Roger Federer", "Rafael Nadal", "Novak Djokovic"), 1) // 继续添加剩余26个问题... );
3. 实现选项菜单与随机抽题逻辑
完善抽题流程,展示题目和对应选项,同时修正原逻辑中错误的答题判断:
public static void startQuiz() { Random rand = new Random(); Scanner scanner = new Scanner(System.in); while (true) { // 随机抽取问题 Question randomQuestion = EASY_QUESTIONS.get(rand.nextInt(EASY_QUESTIONS.size())); // 展示题目和选项菜单 System.out.println("\nHere is your question, guess it right and continue:"); System.out.println(randomQuestion.getQuestionText()); List<String> options = randomQuestion.getOptions(); for (int i = 0; i < options.size(); i++) { System.out.printf("%d. %s%n", i + 1, options.get(i)); } // 获取用户输入 System.out.print("Enter your choice (1-3): "); int userChoice = scanner.nextInt(); // 判断答案正确性 if (userChoice == randomQuestion.getCorrectOptionIndex()) { System.out.println("Correct! Moving to next question..."); } else { System.out.println("Not Correct! Game over."); break; // 答错结束游戏,可按需调整为继续答题 } } scanner.close(); }
4. 主程序入口
添加main方法启动问答流程:
public class QuizApp { private static final List<Question> EASY_QUESTIONS = Arrays.asList( // 问题初始化内容同上 ); public static void startQuiz() { // 抽题逻辑同上 } public static void main(String[] args) { startQuiz(); } }
关键优化点
- 消除冗余:批量初始化列表替代逐个创建对象,添加新问题仅需追加到列表中
- 完善交互:每个问题绑定选项列表,抽题后自动渲染选项菜单,符合用户操作习惯
- 修正逻辑:直接对比用户输入与当前问题的正确答案,避免原逻辑的错误判断
- 扩展性强:轻松扩展到30个问题,后续新增难度等级时可复用Question类结构
内容的提问来源于stack exchange,提问作者Frosty Nah
相关产品推荐
相关产品推荐

