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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:27:03