如何限制Java JOptionPane问答程序的用户输入仅为A/B/C/D选项
实现逻辑与修改后代码
你现有代码存在两个需要修正的点:
- Java 中字符串内容对比不能用
==,该运算符对比的是字符串对象的内存地址,要判断内容是否一致需要使用equals()方法,建议额外增加忽略大小写的处理,兼容用户输入小写选项的场景 - 缺少输入合法性校验逻辑,需要先判断输入是否符合要求,不符合直接弹出警告,不进入判分流程
- 额外注意:你原有代码中的正确答案设置错误,希特勒出生地为奥地利,对应选项B,原有代码判断输入等于D加分的逻辑是错误的
修改后的完整代码如下:
import javax.swing.JOptionPane; public class QuizQuestion { public static void main(String[] args) { int points = 0; String question = "阿道夫·希特勒的出生地是哪里?" + "\nA) 美国" + "\nB) 奥地利" + "\nC) 德国" + "\nD) 西班牙"; String answer = JOptionPane.showInputDialog(question); // 输入合法性校验 if (answer == null || !answer.trim().matches("[ABCDabcd]")) { JOptionPane.showMessageDialog(null, "输入无效,请仅输入A、B、C、D四个选项", "输入错误", JOptionPane.WARNING_MESSAGE); } else { // 去除前后空格、转大写后对比答案,兼容用户输入空格、小写的场景 if (answer.trim().toUpperCase().equals("B")) { points++; JOptionPane.showMessageDialog(null, "回答正确!当前积分:" + points); } else { JOptionPane.showMessageDialog(null, "回答错误"); } } } }
逻辑说明
- 校验逻辑先处理用户点击取消返回空值的边界情况,再判断输入内容去除前后空格后是否仅为A/B/C/D/a/b/c/d中的单个字符,不符合要求直接弹出警告框
- 合法输入统一格式化后再对比答案,避免用户误输入空格、小写字母导致的判分错误
内容的提问来源于stack exchange,提问作者Jositox
相关产品推荐
相关产品推荐

