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

Java代码setEid方法失效无输出,while循环及参数校验问题求助

问题分析与修复方案

你的代码出现无输出(实际是返回null)且setEid方法失效的核心原因,是while循环逻辑完全错误,甚至引发了无限循环,具体问题拆解如下:

1. 无限循环导致程序卡死

当传入的字符串长度小于12时(比如示例中的"rgrge"),while (e.length() < 12)的条件永远为true——因为你在循环体里只是把e赋值给eid,完全没有修改e的长度,循环会一直无限执行,程序根本跑不到System.out.println那一步,自然看不到任何输出。

2. 长度符合要求时反而不赋值

如果传入的字符串长度>=12,while循环条件不成立,循环体直接跳过,eid会保持默认的null值,调用getEid()返回的就是null,打印出来就是空白或null。

修复后的代码

按照你的需求(参数长度不超过12个字符时才赋值),我们把逻辑改成if判断即可,同时增加空指针防护让代码更健壮:

修复版Emp类

public class Emp { 
    private String eid; 
    
    public String getEid() { 
        return eid; 
    } 
    
    public void setEid(String e) { 
        // 校验:非空且长度不超过12时才赋值
        if (e != null && e.length() <= 12) { 
            eid = e; 
        }
        // 可选:处理长度超标的情况,比如截断或提示
        // else if (e != null) {
        //     eid = e.substring(0, 12); // 截断到12位
        //     // System.out.println("员工ID长度不能超过12位,已自动截断");
        // }
    } 
} 

Test类保持不变

public class Test { 
    public static void main(String[] args) { 
        Emp z = new Emp(); 
        z.setEid("rgrge"); 
        System.out.println("\n" + z.getEid()); // 现在会正常输出"rgrge"
    } 
} 

额外扩展(可选)

如果你的需求是不足12位时补全(比如补0),超过12位时截断,可以用以下逻辑:

public void setEid(String e) { 
    if (e == null) {
        eid = null;
        return;
    }
    if (e.length() < 12) {
        // 左对齐补0,也可以用StringBuilder手动拼接
        eid = String.format("%-12s", e).replace(' ', '0'); 
    } else if (e.length() > 12) {
        eid = e.substring(0, 12);
    } else {
        eid = e;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 06:32:34