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

Java中Try Catch与if else运行异常 手机号校验错误问题排查

问题根因
  • 输入未做去空处理 + 校验逻辑顺序颠倒:获取手机号输入后没有去除前后空白字符,用户输入时不小心带的空格会导致10位数字也触发长度校验失败;且原有逻辑先拼接结果文本、渲染UI,后做手机号格式校验,甚至在校验前就使用了未赋值的手机号存储变量,逻辑完全混乱。
  • 数值类型选择错误:Java中int类型的最大值为2147483647,仅支持最大不超过21亿的10位数字,超过该值的10位数字会触发数值溢出,抛出NumberFormatException。手机号不需要参与数值运算,优先用String存储,有转数值需求时请用long类型。
修复方案

1. 变量类型修改

将原有存储手机号的int变量改为long类型:

// 把 private int a; 替换为
private long a;

2. 调整Continue按钮的事件逻辑

将actionPerformed方法中Continue对应的代码替换为以下内容:

if(event.getSource()==Continue){
    // 去除输入前后空白字符,避免空格导致校验异常
    String num=phone.getText().trim();
    String fname=firstname.getText().trim();
    String lname=lastname.getText().trim();

    // 先校验长度是否符合要求
    if(num.length()!=10){
        JOptionPane.showMessageDialog(null,"请输入10位手机号","Alert",JOptionPane.ERROR_MESSAGE);
        return;
    }
    // 再校验是否为纯数字
    long phoneNum;
    try{
        phoneNum=Long.parseLong(num);
    }catch(NumberFormatException e){
        JOptionPane.showMessageDialog(null,"请输入有效的纯数字手机号","Error",JOptionPane.ERROR_MESSAGE);
        result.setText("");
        phone.setForeground(Color.RED);
        return;
    }
    // 所有校验通过后再执行正常业务逻辑
    a = phoneNum;
    String resulttext="学生姓名:\t"+fname.toUpperCase(Locale.ROOT)+" "+lname.toUpperCase(Locale.ROOT)+"\n登记手机号:\t"+a+"\n学生ID:\t\t"+id.getText().toUpperCase(Locale.ROOT)+"\n学生性别:\t"+entgender.getSelectedItem();
    result.setText(resulttext);
    print.setBounds(700,600,250,30);
}
修复说明
  • 先对用户输入做trim()处理,彻底避免空白字符导致的长度校验误判
  • 调整逻辑顺序为「去空→长度校验→格式校验→业务处理」,校验失败时直接终止后续逻辑,不会执行正常流程的代码
  • 用long类型存储手机号,解决10位大数溢出的问题
  • 所有校验通过后再拼接结果文本、更新UI,不会出现变量未赋值就使用的问题

内容的提问来源于stack exchange,提问作者Satyaki Roy ghatak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:45:08