Java for循环和嵌套if语句

时间:2015-12-17 16:23:46

标签: java if-statement for-loop

我无法弄清楚代码中的问题所在。我有一个员工数组列表和赋值数组列表。目标是仅向那些技能阵列包含所有必需技能且在轮班时可用的员工添加availableEmpAry

问题出在我找到了具备所需技能的员工之后。在启动第二个循环时,它不会检查员工当时是否可用。它始终跳转到else并显示消息框。

for (int j = 0; j < empAry.size(); j++){
    //Checking if employee skill array has an exact skill for cs
    if (empAry.get(j).empSkillAry.containsAll(tempShift.Schedule.skillRequiredAry)){
        for(int i = 0; i < assignmentAry.size(); i++){
            if(assignmentAry.get(i).employee.equals(empAry.get(j))){
                Date shiftStart= tempShift.Start;
                Date shiftEnd=tempShift.End;
                Date empAsStart=assignmentAry.get(i).Start;
                Date empAsEnd=assignmentAry.get(i).End;

                if(empAsStart.before(shiftEnd) && empAsEnd.after(shiftStart)){
                    JOptionPane.showMessageDialog(availableEmp, "No Available Employee!");
                }else{
                    availableEmpAry.add(empAry.get(j));
                    availableEmp.setModel(
                        new DefaultComboBoxModel<Object>(availableEmpAry.toArray())
                    );
                }
            }else{
                availableEmpAry.add(empAry.get(j));
                availableEmp.setModel(
                    new DefaultComboBoxModel<Object>( availableEmpAry.toArray())
                );
            }
        }//closing assignment loop
    }else{
        JOptionPane.showMessageDialog(availableEmp, "No employee with required skill!");
    }
} // closing loop for employee

1 个答案:

答案 0 :(得分:0)

在第二个循环开始时,有以下代码行:

if(assignmentAry.get(i).employee.equals(empAry.get(j)))..

不清楚什么类型的对象是员工,但为了使此条件为TRUE并进入检查可用性的块,您需要正确实现JAva类的equals方法与员工对象关联。 还建议assignmentAry.get(i).employee的类型和empAry.get(j)的类型应该相同,以使equals方法有意义。这不是JAVA约束,而更像是设计约束。