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

Java实现setSSN校验返回false时循环重输功能的问题求助

代码问题修正说明

一、现有代码存在的核心问题

1. setSSN方法问题

  • 长度校验不通过时没有错误提示,用户无法感知失败原因
  • 方法命名不符合通用规范:常规setter为无返回值的赋值方法,当前方法兼具校验+赋值功能,建议命名调整(非语法错误,属于可优化项)

2. main方法问题

  • 语法错误:while循环的判断条件!employee1.setSSN(true)参数错误,setSSN要求传入String类型的SSN值,你传入了boolean类型的true,代码无法通过编译
  • 逻辑错误:do代码块中已经调用setSSN处理用户输入,但没有接收返回的校验结果,循环判断时重复调用完全不符合预期的setSSN方法,循环逻辑完全失效
  • 体验问题:不管输入是否合法,都会直接打印employee1.toString(),输入错误时展示的信息没有意义

二、修正后的代码

修正后的setSSN方法

// 兼具校验和赋值功能,可根据需求改名为validateAndSetSSN语义更清晰
public boolean setSSN(String ssN) {
    // 长度校验失败时增加提示
    if (ssN.length() != 12) {
        System.out.println("错误:SSN长度必须为12位,格式要求XXX-XXX-XXXX");
        return false;
    }
    if(Character.isDigit(ssN.charAt(0)) && Character.isDigit(ssN.charAt(1)) &&
       Character.isDigit(ssN.charAt(2)) && ssN.charAt(3) == '-' &&
       Character.isDigit(ssN.charAt(4)) && Character.isDigit(ssN.charAt(5)) &&
       Character.isDigit(ssN.charAt(6)) && ssN.charAt(7) == '-' &&
       Character.isDigit(ssN.charAt(8)) && Character.isDigit(ssN.charAt(9)) &&
       Character.isDigit(ssN.charAt(10)) && Character.isDigit(ssN.charAt(11))) {
        ssNumber = ssN;
        return true;
    } else {
        System.out.println("错误:SSN格式不符合要求,正确格式为XXX-XXX-XXXX(X为数字)");
        return false;
    }
}

修正后的main方法逻辑

System.out.println("请输入你的社会安全号码,格式要求为XXX-XXX-XXXX:"); 
boolean ssnValid = false;
do {
    System.out.print("SSN: ");
    String input1 = in.nextLine();
    // 接收校验结果
    ssnValid = employee1.setSSN(input1);
    System.out.println();
    // 只有校验通过才打印员工信息
    if (ssnValid) {
        System.out.println(employee1.toString());
        System.out.println();
    }
// 用刚才存的校验结果判断是否要继续循环
} while(!ssnValid);

三、可选优化建议

如果熟悉正则表达式的话,可以把SSN的校验逻辑简化为一行,代码更简洁:

public boolean setSSN(String ssN) {
    if (ssN.matches("\\d{3}-\\d{3}-\\d{4}")) {
        ssNumber = ssN;
        return true;
    }
    System.out.println("错误:SSN格式不符合要求,正确格式为XXX-XXX-XXXX(X为数字,长度共12位)");
    return false;
}

内容的提问来源于stack exchange,提问作者dnl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:54:00