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

Java使用do-while做姓名非空校验输入有效值仍无法退出循环问题求助

问题原因

  • 代码中do循环内调用JOptionPane.showInputDialog获取的新输入结果,没有重新赋值给name变量,循环判断条件name.equals("")始终使用第一次输入的name值做校验。如果首次输入为空,后续无论输入什么内容都不会更新name的取值,因此会陷入无限循环。
  • 额外隐藏风险:如果用户点击输入框的「取消」按钮,JOptionPane.showInputDialog会返回null,直接调用equals方法会触发空指针异常导致程序崩溃。

修复方案

核心调整点:

  1. 将do循环内的输入结果赋值给name变量,每次循环都更新校验用的变量值
  2. 优化非空判断逻辑,兼容取消返回null、空输入、全空格输入的异常场景

修复后完整代码:

import javax.swing.JOptionPane;
public class New {
    public static void main (String[] args) { 
        String name;
        do{
            // 每次输入的结果直接赋值给name,更新变量值
            name = JOptionPane.showInputDialog("Enter your name... ");
        }
        // 先判断null,再判断去除首尾空格后是否为空,覆盖所有非法输入场景
        while(name == null || name.trim().isEmpty());

        JOptionPane.showMessageDialog(null, "Hello and welcome!, "+name);

        int age = Integer.parseInt(JOptionPane.showInputDialog("Enter your age... "));
        if(age>=60) { 
            JOptionPane.showMessageDialog(null, "Ok Boomer!");
            System.exit(0);
        }
        else if(age>=18) { 
            JOptionPane.showMessageDialog(null, "You are an adult, Welcome!");
        }
        else { 
            JOptionPane.showMessageDialog(null, "You are a kid!");
            System.exit(0);
        }

        String day = JOptionPane.showInputDialog("What's the day? ");

        if(day.equals("Monday")) { 
            JOptionPane.showMessageDialog(null, "Welcome to Java club!");
        }
        else {
            JOptionPane.showMessageDialog(null, "Try again later!");
        }
        
    }
}

内容的提问来源于stack exchange,提问作者O.M.A.R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:57:03