Java使用do-while做姓名非空校验输入有效值仍无法退出循环问题求助
问题原因
- 代码中do循环内调用
JOptionPane.showInputDialog获取的新输入结果,没有重新赋值给name变量,循环判断条件name.equals("")始终使用第一次输入的name值做校验。如果首次输入为空,后续无论输入什么内容都不会更新name的取值,因此会陷入无限循环。 - 额外隐藏风险:如果用户点击输入框的「取消」按钮,
JOptionPane.showInputDialog会返回null,直接调用equals方法会触发空指针异常导致程序崩溃。
修复方案
核心调整点:
- 将do循环内的输入结果赋值给
name变量,每次循环都更新校验用的变量值 - 优化非空判断逻辑,兼容取消返回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
相关产品推荐
相关产品推荐

