while 循环不检查所有条件
While loop not checking all conditions
我有一个循环应该只在 jobStatus(0) 和 jobStatus(1) 都停止执行一次 returns 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)
之一为二时停止。
应该是:
while(c.getJobStatus(0) != 2 || c.getJobStatus(1) != 2){
c.updateJobs();
}
只要其中之一不是两个,循环就应该继续。
循环入口条件错误。
您本可以通过翻译您想在代码中执行的操作来避免该错误,从而导致更自然:
while(!(c.getJobStatus(0) == 2 && c.getJobStatus(1) == 2)){ //while both are not 2
c.updateJobs();
}
我有一个循环应该只在 jobStatus(0) 和 jobStatus(1) 都停止执行一次 returns 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)
之一为二时停止。
应该是:
while(c.getJobStatus(0) != 2 || c.getJobStatus(1) != 2){
c.updateJobs();
}
只要其中之一不是两个,循环就应该继续。
循环入口条件错误。 您本可以通过翻译您想在代码中执行的操作来避免该错误,从而导致更自然:
while(!(c.getJobStatus(0) == 2 && c.getJobStatus(1) == 2)){ //while both are not 2
c.updateJobs();
}