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
相关产品推荐
相关产品推荐

