虽然循环没有检查所有条件

时间:2015-01-01 13:50:29

标签: java

我有一个循环,只有在jobStatus(0)和jobStatus(1)都返回2时才会停止执行

while(c.getStatus(0) != 2 && c.getStatus(1) != 2){
    c.update();
}
System.out.println("Person id0:  " + c.getStatus(0));
System.out.println("Person id1:  " + c.getStatus(1));

这是update()方法。

public void update() {      
    for(Map.Entry<Integer, Person> person : allPeople.entrySet()){ //check all jobs

        Person person = person.getValue();
        if(person.getStatus() != person.WORKING){
            continue;
        }
        Date currentTime = new Date();
        long startTime = person.getStartTime().getTime();
        long requiredTime = person.getRequiredTime();
        long finishTime = startTime + requiredTime;

        if(finishTime <= currentTime.time()){
            person.finished();
            getMachineById(getAllocatedMachineId()).changeMachineStatus(); 
        }
    }
}

循环结束后的输出:

Person id0:  2
Person id1:  1

不确定为什么它的行为方式,long变量是正确的(打印变量显示当前时间正确递增,直到它超过完成时间 - 但然后它退出循环并且不会继续getStatus(1)

2 个答案:

答案 0 :(得分:3)

你的情况不对。当c.getJobStatus(0)c.getJobStatus(1)中的一个为两个时停止。

应该是:

while(c.getJobStatus(0) != 2 || c.getJobStatus(1) != 2){
    c.updateJobs();
}

只要其中一个不是两个,循环就应该继续。

答案 1 :(得分:1)

循环输入条件错误。 您可以通过翻译您想要在代码中执行的操作来避免此错误,从而导致更自然

while(!(c.getJobStatus(0) == 2 && c.getJobStatus(1) == 2)){ //while both are not 2
    c.updateJobs();
}