3 回答
TA贡献1853条经验 获得超9个赞
我最好的建议是避免同时完成两个操作。在这里,您尝试过滤掉已删除的员工,同时将他们的数据附加到StringBuilder. 理想情况下,我会先过滤掉员工,然后使用他们来创建我的String输出。考虑到这一点,您的方法将如下所示:
public static void display() {
StringBuilder builder = new StringBuilder();
List<Employee> filtered = Arrays.stream(employees)
.filter(employee -> employee.getName() == null)
.collect(Collectors.toList());
filtered.forEach(employee ->
builder.append(employee.getName())
.append("\t ")
.append(employee.getPay())
.append("\n "));
String output = builder.toString();
JOptionPane.showMessageDialog(null,"Staff_No Staff_Name Pay \n" + output);
}
假设您将您的员工存储在一个Employees 数组中,我基本上会将该数组流式过滤掉所有名称为空的条目,并将结果收集到一个列表中。
有了这个列表,我将继续使用StringBuilder来构建我的输出消息以显示在对话框中。还要注意这里,我认为让StringBuilder成为类的静态成员没有任何意义。你很可能在方法的上下文中拥有它。
有了上述所有内容,您在这里有两个非常不同的操作。一个是过滤掉所有不需要的条目,另一个是输出字符串的实际构造。
TA贡献1824条经验 获得超6个赞
只需检查null并跳过此员工。一开始staffnumber应该是0。此外,您不必StringBuilder创建静态成员,只需创建新的StringBuilder. (否则每次调用此方法时都必须清除它)
public static void displayrezStaffRecord() {
int staffnumber = 0;
StringBuilder staffRecord= new StringBuilder();
for (int n = 0; n < staffDetails.length; n++) {
if (staffDetails[n].getStaffName() == null) {
menunumber--;
continue;
}
staffRecord.append(staffDetails[n].getStaffName());
staffRecord.append("\t ");
staffRecord.append(staffDetails[n].getPay());
staffRecord.append(" \n ");
staffnumber++;
}
String finalresult = staffRecord.toString();
JOptionPane.showMessageDialog(null, "Staff_No Staff_Name Pay \n" + finalresult);
}
我不知道是不是因为你的代码不完整,我看不到你在任何地方使用变量staffnumber。
TA贡献1821条经验 获得超4个赞
尝试仅删除当前员工并在删除后减少员工数量,如 if 语句中的以下内容:
if (staffDetails[n].getStaffName()==null){
menunumber--;
staffRecord.delete(staffRecord.length()-4,staffRecord.length());
staffnumber--;
}
添加回答
举报