Java使用JOptionPane做输入校验循环时合法输入后无输出问题求助
问题原因
代码的核心问题是条件分支的结构设计错误:
- 开头判断输入非法的
if分支,和后续判断输入为yes/no的else if分支是互斥关系 - 只要第一次输入的内容不是yes/no,就会进入第一个
if分支执行重输循环,循环结束得到合法输入后,不会再执行后续的else if分支给xd变量赋值,最终xd还是初始空值,所以没有预期输出。
修复方案
推荐将输入校验和结果赋值的逻辑拆解开,不要用else把二者绑定:
package harmony.randomstuff; import java.util.Scanner; import javax.swing.JOptionPane; public class RandomStuff { public static void main (String[]args) { Scanner dakeyboard = new Scanner(System.in); String xd = ""; // 第一次弹窗获取输入 String x = JOptionPane.showInputDialog("enter (yes\\no)"); // 输入合法性校验,不合法就循环重输 if (!(("yes".equals(x))||("no".equals(x)))) { do { x = JOptionPane.showInputDialog("please enter (yes\\no)"); } while (!(("yes".equals(x))||("no".equals(x)))); } // 拿到合法输入后统一赋值 if ("yes".equals(x)){ xd="YES"; } else if ("no".equals(x)){ xd="NO"; } System.out.println(xd); dakeyboard.close(); } }
补充优化建议
可以把重复的合法性判断逻辑抽成单独的判断条件,简化代码:
// 定义合法性判断方法 private static boolean isInputValid(String input) { return "yes".equals(input) || "no".equals(input); }
调用后代码逻辑会更易读,也不容易写错判断条件。
内容的提问来源于stack exchange,提问作者raxnocafi
相关产品推荐
相关产品推荐

