java - While 循环不检查所有条件

标签 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)

最佳答案

你把条件弄错了。当 c.getJobStatus(0)c.getJobStatus(1) 之一为 2 时,它会停止。

应该是:

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

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

关于java - While 循环不检查所有条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27731343/

相关文章:

java - 无法加载 JNI 共享库 (JDK)

java - panel.setFocusable() 不起作用

c# - ArcGIS Development.Java 与 .Net(C#)

java - 为什么这个线程代码不能在 GUI 中正常工作? [Java Swing] [线程]

JavaFX ListView

Java+ hibernate : Fire property change events when object retrieved from database

java - OJB 引用描述符 1 :0 relationship? 我是否应该将自动检索设置为 false?

java - 门户 Controller 的 setContentType 失败

java - REST ASSURED TEST 创建我自己的 given() 方法

java - 更改主类中的 Spring boot 日志文件